Index: /extensions/pLoader/tags/1.6/bin/pLoader.ini
===================================================================
--- /extensions/pLoader/tags/1.6/bin/pLoader.ini	(revision 6108)
+++ /extensions/pLoader/tags/1.6/bin/pLoader.ini	(revision 6108)
@@ -0,0 +1,7 @@
+[
+    {
+        site_url      => 'http://localhost',
+        site_username => 'username',
+        site_password => 'password',
+    }
+]
Index: /extensions/pLoader/tags/1.6/build/build_pLoader.bat
===================================================================
--- /extensions/pLoader/tags/1.6/build/build_pLoader.bat	(revision 6108)
+++ /extensions/pLoader/tags/1.6/build/build_pLoader.bat	(revision 6108)
@@ -0,0 +1,1 @@
+pp @par_options.txt --gui --lib=..\src --icon=..\res\favicon.ico -output=..\bin\pLoader.exe ..\src\ploader.pl
Index: /extensions/pLoader/tags/1.6/build/par_options.txt
===================================================================
--- /extensions/pLoader/tags/1.6/build/par_options.txt	(revision 6108)
+++ /extensions/pLoader/tags/1.6/build/par_options.txt	(revision 6108)
@@ -0,0 +1,193 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008      Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+# wxpar Getopt::Argfile for PAR::Packer pp
+
+-M attributes.pm
+-l C:/strawberry/perl/site/lib/Alien/wxWidgets/msw_2_8_8_uni_mslu_gcc_3_4/lib/mingwm10.dll
+-l C:/strawberry/perl/site/lib/Alien/wxWidgets/msw_2_8_8_uni_mslu_gcc_3_4/lib/wxmsw28u_adv_gcc_custom.dll
+-l C:/strawberry/perl/site/lib/Alien/wxWidgets/msw_2_8_8_uni_mslu_gcc_3_4/lib/wxmsw28u_qa_gcc_custom.dll
+-l C:/strawberry/perl/site/lib/Alien/wxWidgets/msw_2_8_8_uni_mslu_gcc_3_4/lib/wxmsw28u_html_gcc_custom.dll
+-l C:/strawberry/perl/site/lib/Alien/wxWidgets/msw_2_8_8_uni_mslu_gcc_3_4/lib/wxbase28u_net_gcc_custom.dll
+-l C:/strawberry/perl/site/lib/Alien/wxWidgets/msw_2_8_8_uni_mslu_gcc_3_4/lib/wxmsw28u_gl_gcc_custom.dll
+-l C:/strawberry/perl/site/lib/Alien/wxWidgets/msw_2_8_8_uni_mslu_gcc_3_4/lib/wxmsw28u_aui_gcc_custom.dll
+-l C:/strawberry/perl/site/lib/Alien/wxWidgets/msw_2_8_8_uni_mslu_gcc_3_4/lib/wxmsw28u_core_gcc_custom.dll
+-l C:/strawberry/perl/site/lib/Alien/wxWidgets/msw_2_8_8_uni_mslu_gcc_3_4/lib/wxbase28u_gcc_custom.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/delegates.xml
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_vicar_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_mpeg_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_x_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_ept_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_sun_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_png_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_wpg_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_pdb_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_txt_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_cip_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_xpm_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_xtrn_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_pwp_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/type.xml
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/CORE_RL_Magick++_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/X11.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_cin_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_raw_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_pix_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_dib_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/Xext.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_plasma_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_fax_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/configure.xml
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/magic.xml
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_sfw_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_map_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/CORE_RL_magick_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_pdf_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_clip_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_url_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_rgb_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_scr_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_locale_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_art_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_tiff_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_jpeg_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_thumbnail_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/analyze.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_gray_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/CORE_RL_xlib_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/CORE_RL_jp2_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_braille_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_ps3_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_jbig_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_tim_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_rla_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_pnm_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_xwd_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_pcd_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_pcl_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_rle_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_cmyk_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_svg_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_histogram_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/thresholds.xml
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_magick_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_djvu_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_label_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_gif_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/Magick.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_ps_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_mpc_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_wbmp_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_tga_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_mpr_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_mvg_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/CORE_RL_jbig_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_dpx_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_viff_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/log.xml
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_logo_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_dcm_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/CORE_RL_wand_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_dng_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/coder.xml
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/english.xml
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_miff_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_msl_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_html_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_xbm_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_exr_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/CORE_RL_jpeg_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_avs_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_pict_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_jp2_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_ycbcr_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_emf_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_topol_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_pcx_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/autosplit.ix
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/CORE_RL_zlib_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_xc_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/locale.xml
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_cut_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_uyvy_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_mat_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/CORE_RL_libxml_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_meta_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_matte_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_uil_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_caption_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_xps_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_mtv_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_fpx_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_yuv_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_mono_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_ps2_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/CORE_RL_lcms_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_sgi_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_otb_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_palm_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_vid_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_sct_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_bmp_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_clipboard_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/CORE_RL_tiff_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/colors.xml
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_tile_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_cineon_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_dps_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_xcf_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_dot_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_gradient_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_fits_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_avi_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_psd_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/CORE_RL_bzlib_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/CORE_RL_ttf_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_wmf_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_stegano_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_preview_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_info_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_null_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_pattern_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_icon_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_ttf_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_ipl_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/CORE_RL_png_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/IM_MOD_RL_dds_.dll
+-l C:/strawberry/perl/site/lib/auto/Image/Magick/type-ghostscript.xml
+-a "C:/strawberry/perl/site/lib/File/HomeDir/Windows.pm;lib/File/HomeDir/Windows.pm"
+-a "C:/strawberry/perl/site/lib/File/HomeDir/Darwin.pm;lib/File/HomeDir/Darwin.pm"
+-a "C:/strawberry/perl/site/lib/File/HomeDir/Driver.pm;lib/File/HomeDir/Driver.pm"
+-a "C:/strawberry/perl/site/lib/File/HomeDir/MacOS9.pm;lib/File/HomeDir/MacOS9.pm"
+-a "C:/strawberry/perl/site/lib/File/HomeDir/Unix.pm;lib/File/HomeDir/Unix.pm"
+-a "C:/strawberry/perl/site/lib/JSON/PP.pm;lib/JSON/PP.pm"
+-a "C:/strawberry/perl/site/lib/JSON/PP56.pm;lib/JSON/PP56.pm"
+-a "C:/strawberry/perl/site/lib/JSON/PP58.pm;lib/JSON/PP58.pm"
+-a "C:/strawberry/perl/site/lib/JSON/PP5005.pm;lib/JSON/PP5005.pm"
+-a "C:/strawberry/perl/site/lib/JSON/PP/Boolean.pm;lib/JSON/PP/Boolean.pm"
+-a "C:/strawberry/perl/site/lib/Image/ExifTool/Writer.pl;lib/Image/ExifTool/Writer.pl"
+-a "C:/strawberry/perl/site/lib/Image/ExifTool/WriteXMP.pl;lib/Image/ExifTool/WriteXMP.pl"
+-a "C:/strawberry/perl/site/lib/Image/ExifTool/WritePostScript.pl;lib/Image/ExifTool/WritePostScript.pl"
+-a "C:/strawberry/perl/site/lib/Image/ExifTool/WritePNG.pl;lib/Image/ExifTool/WritePNG.pl"
+-a "C:/strawberry/perl/site/lib/Image/ExifTool/WritePhotoshop.pl;lib/Image/ExifTool/WritePhotoshop.pl"
+-a "C:/strawberry/perl/site/lib/Image/ExifTool/WritePDF.pl;lib/Image/ExifTool/WritePDF.pl"
+-a "C:/strawberry/perl/site/lib/Image/ExifTool/WriteIPTC.pl;lib/Image/ExifTool/WriteIPTC.pl"
+-a "C:/strawberry/perl/site/lib/Image/ExifTool/WriteExif.pl;lib/Image/ExifTool/WriteExif.pl"
+-a "C:/strawberry/perl/site/lib/Image/ExifTool/WriteCanonRaw.pl;lib/Image/ExifTool/WriteCanonRaw.pl"
+-l ../src/pLoader.exe.manifest
Index: /extensions/pLoader/tags/1.6/locale/cs_CZ/pLoader.po
===================================================================
--- /extensions/pLoader/tags/1.6/locale/cs_CZ/pLoader.po	(revision 6108)
+++ /extensions/pLoader/tags/1.6/locale/cs_CZ/pLoader.po	(revision 6108)
@@ -0,0 +1,623 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Piwigo pLoader\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-16 09:54+0100\n"
+"PO-Revision-Date: \n"
+"Last-Translator: noname <noorg>\n"
+"Language-Team: Piwigo team <team@piwigo.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-SearchPath-0: C:/strawberry/perl/site/lib/Uploader/GUI\n"
+"X-Poedit-SearchPath-1: d:/pLoader/res\n"
+
+msgid "Select photos for upload"
+msgstr "Vyberte fotografie k odeslání"
+
+msgid "JPEG files"
+msgstr "JPEG soubory"
+
+msgid "Default author"
+msgstr "Přednastavený autor"
+
+msgid "Foto prefix"
+msgstr "Foto prefix"
+
+msgid "Site thumbnail size"
+msgstr "Web velikost náhledu"
+
+msgid "Site image width"
+msgstr "Web obr.šířka"
+
+msgid "Site image height"
+msgstr "Web obr.výška"
+
+msgid "Auto rotate image"
+msgstr "Auto rotace fotek"
+
+msgid "Upload high (original size) "
+msgstr "Nahrát ve vysokém rozl. (original size) "
+
+msgid "Yes"
+msgstr "Ano"
+
+msgid "No"
+msgstr "Ne"
+
+msgid "Admin. username"
+msgstr "Admin. jméno"
+
+msgid "Admin. password"
+msgstr "Admin. heslo"
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Cancel"
+msgstr "Zrušit"
+
+msgid "Create date"
+msgstr "Vytvořeno dne"
+
+msgid "Width"
+msgstr "Šířka"
+
+msgid "Height"
+msgstr "Výška"
+
+msgid "Orientation"
+msgstr "Orientace"
+
+msgid "Shutter speed"
+msgstr "Čas"
+
+msgid "Aperture"
+msgstr "Clona"
+
+msgid "Focal length"
+msgstr "Ohnisková vzdálenost"
+
+msgid "Model"
+msgstr "Model"
+
+msgid "Lens"
+msgstr "Objektiv"
+
+msgid "Author"
+msgstr "Autor"
+
+msgid "Comment"
+msgstr "Komentář"
+
+msgid "Chinese"
+msgstr "Čínsky"
+
+msgid "Chinese simplified"
+msgstr "Čínsky zjednodušeně"
+
+msgid "Czech"
+msgstr "Česky"
+
+msgid "Danish"
+msgstr "Dánsky"
+
+msgid "English"
+msgstr "Anglicky"
+
+msgid "German"
+msgstr "Německy"
+
+msgid "Spanish"
+msgstr "Španělsky"
+
+msgid "French"
+msgstr "French"
+
+msgid "Hungarian"
+msgstr "Maďarsky"
+
+msgid "Italian"
+msgstr "Italsky"
+
+msgid "Japanese"
+msgstr "Japonsky"
+
+msgid "Dutch"
+msgstr "Holandsky"
+
+msgid "Polish"
+msgstr "Polsky"
+
+msgid "Portuguese Brazil"
+msgstr "Portugalsky Brazilsky"
+
+msgid "Portuguese Portugal"
+msgstr "Portugalsky"
+
+msgid "Russian"
+msgstr "Rusky"
+
+msgid "Slovak"
+msgstr "Slovensky"
+
+msgid "Brasil"
+msgstr "Brazilsky"
+
+msgid "pLoader needs to be restarted to display the new selected language"
+msgstr "Aplikace pLoader musí být pro změnu jazyka ukončena a znovu spuštěna"
+
+msgid "Piwigo categories"
+msgstr "Piwigo Kategorie"
+
+msgid "Photo properties"
+msgstr "Parametry Fotek"
+
+msgid "Tools"
+msgstr "Nástroje"
+
+msgid "Global settings"
+msgstr "Globální nastavení"
+
+msgid "Advanced"
+msgstr "Pokročilé"
+
+msgid "Transfert chunk size"
+msgstr "Transfert chunk size"
+
+msgid "General"
+msgstr "Hlavní"
+
+msgid "Resized"
+msgstr "Resized"
+
+msgid "Thumbnail"
+msgstr "Náhled"
+
+msgid "Preview"
+msgstr "Ukázka"
+
+msgid "Photo selection"
+msgstr "Výběr fotek"
+
+msgid "Language choice"
+msgstr "Výběr jazyka"
+
+msgid "Choose a language"
+msgstr "Vyber překlad"
+
+msgid "Upload to Piwigo"
+msgstr "Upload na web"
+
+msgid "Remove photo from selection"
+msgstr "Odeber foto z výběru"
+
+msgid "Add photo to selection"
+msgstr "Přidat foto do výběru"
+
+msgid "Not connected"
+msgstr "Spojení nenavázáno"
+
+msgid "Connection to"
+msgstr "Připojeno k"
+
+msgid "failed"
+msgstr "Chyba"
+
+msgid "Piwigo login"
+msgstr "Piwigo login"
+
+msgid "Piwigo login error"
+msgstr "Piwigo login chyba"
+
+msgid "Please select a valid target category"
+msgstr "Vyberte existující kategorii"
+
+msgid "Piwigo upload error"
+msgstr "Piwigo Upload chyba"
+
+msgid "Category name"
+msgstr "Název kategorie"
+
+msgid "Add new category"
+msgstr "Přidej novou kategorii"
+
+msgid "New category"
+msgstr "Nová kategorie"
+
+msgid "Upload cancelled"
+msgstr "Nahrání ukončeno"
+
+msgid "Image upload progress information"
+msgstr "Ukládání obrázků informace o průběhu"
+
+msgid "Cancel upload"
+msgstr "Ukončit upload"
+
+msgid "Piwigo upload information"
+msgstr "Piwigo upload informace"
+
+msgid "Processing"
+msgstr "Pracuji"
+
+msgid "images processed"
+msgstr "Fotky zpracovávány"
+
+msgid "images uploaded"
+msgstr "Fotky odeslány"
+
+msgid "images in errors and not uploaded"
+msgstr "Došlo k chybě a fotky nebyly odeslány"
+
+msgid "Duration"
+msgstr "Průběh"
+
+msgid "Categories"
+msgstr "Kategorie"
+
+msgid "categories"
+msgstr "kategorie"
+
+msgid "Categorie"
+msgstr "Kategorie"
+
+msgid "categorie"
+msgstr "kategorie"
+
+msgid "Album"
+msgstr "Album"
+
+msgid "Albums"
+msgstr "Alba"
+
+msgid "album"
+msgstr "album"
+
+msgid "albums"
+msgstr "alba"
+
+msgid "Photo caption"
+msgstr "Foto titulek"
+
+msgid "Default photo caption"
+msgstr "Defaultní foto titulek"
+
+msgid "Resize site image"
+msgstr "Změnit velikost fotek pro web"
+
+msgid "Auto rotate"
+msgstr "Autom.rotace"
+
+msgid "Upload high (original size)"
+msgstr "Upload vysoké rozlišení (original size)"
+
+msgid "Site image jpeg quality"
+msgstr "JPEG-kvalita"
+
+msgid "Site image filter"
+msgstr "Použíj filtr"
+
+msgid "Site image blur"
+msgstr "Rozmazání"
+
+msgid "Site image interlace"
+msgstr "Prokládání"
+
+msgid "Site thumbnail jpeg quality"
+msgstr "JPEG kvalita náhledu"
+
+msgid "Photo selection thumbnail size"
+msgstr "Foto výběr velikosti miniatur"
+
+msgid "Photo selection thumbnail jpeg quality"
+msgstr "Foto výběr kvality miniatur jpeg"
+
+msgid "Use exif preview when available"
+msgstr "Použít EXIF-ukázku pokud je"
+
+msgid "Custom preview ratio"
+msgstr "Obecná hodnota pro preview"
+
+msgid "Piwigo url"
+msgstr "Piwigo url"
+
+msgid "Connect"
+msgstr "Připojit"
+
+msgid "Work Offline"
+msgstr "Pracovat offline"
+
+msgid "Exit"
+msgstr "Ukončit"
+
+msgid "empty - work Offline"
+msgstr "prázdné - práce Offline"
+
+msgid "None"
+msgstr "Nic"
+
+msgid "File name"
+msgstr "Název souboru"
+
+msgid "File path and name"
+msgstr "Soubor cesta a název"
+
+msgid "Prefix"
+msgstr "Prefix"
+
+msgid "Prefix + rank number"
+msgstr "Prefix + pořadové číslo"
+
+msgid "Rank number + prefix"
+msgstr "Pořadové číslo + prefix"
+
+msgid "Prefix + create date chrono"
+msgstr "Prefix + chrono. datum"
+
+msgid "Create date chrono + prefix"
+msgstr "Chrono. datum + prefix"
+
+msgid "Photo"
+msgstr "Foto"
+
+msgid "Image processing progress information"
+msgstr "Informace o průběhu zpracování obrazů"
+
+msgid "Cancel image processing"
+msgstr "Zrušit zpracování obrazů"
+
+msgid "Add new album"
+msgstr "Přidat nové album"
+
+msgid "Album name"
+msgstr "Album název"
+
+msgid "New album"
+msgstr "Nové album"
+
+msgid "Refresh"
+msgstr "Obnovit"
+
+msgid "Expand all"
+msgstr "Rozbal vše"
+
+msgid "Collapse all"
+msgstr "Sbalit vše"
+
+msgid "Getting started"
+msgstr "Start"
+
+msgid "Properties"
+msgstr "Nastavení"
+
+msgid "Remove uploaded photo from selection"
+msgstr "Odebrat odeslané fotky z výběru"
+
+msgid "Activate watermark"
+msgstr "Aktivuj vodoznak"
+
+msgid "Activate watermark on high definition"
+msgstr "Aktivuj vodoznak pro vysoké rozlišení"
+
+msgid "Text"
+msgstr "Text"
+
+msgid "Text size"
+msgstr "Velikost textu"
+
+msgid "Color"
+msgstr "Barva"
+
+msgid "Position"
+msgstr "Pozice"
+
+msgid "Top margin"
+msgstr "Horní okraj"
+
+msgid "Left margin"
+msgstr "Levý okraj"
+
+msgid "White"
+msgstr "Bílá"
+
+msgid "Black"
+msgstr "Černá"
+
+msgid "Top"
+msgstr "Horní"
+
+msgid "Top left"
+msgstr "Horní vlevo"
+
+msgid "Top right"
+msgstr "Horní vpravo"
+
+msgid "Bottom"
+msgstr "Dole"
+
+msgid "Bottom left"
+msgstr "Dole vlevo"
+
+msgid "Bottom right"
+msgstr "Dole vpravo"
+
+msgid "Center"
+msgstr "Uprostřed"
+
+msgid "Left"
+msgstr "Nalevo"
+
+msgid "Right"
+msgstr "Napravo"
+
+msgid "my watermark"
+msgstr "můj vodotisk"
+
+msgid "Show"
+msgstr "Ukaž"
+
+msgid "All"
+msgstr "Vše"
+
+msgid "Selected"
+msgstr "Vybráno"
+
+msgid "Not selected"
+msgstr "Nevybráno"
+
+msgid "Uploading"
+msgstr "Nahrávám"
+
+msgid "Uploading resized"
+msgstr "Nahrávám zmenšené"
+
+msgid "Uploading thumbnail"
+msgstr "Nahrávám náhledy"
+
+msgid "Uploading high definition"
+msgstr "Nahrávám originální velikost"
+
+msgid "Checksum for"
+msgstr "Kontrolní součet"
+
+msgid "Communication error with"
+msgstr "Chyba komunikace s"
+
+msgid "Thumbnail image done for"
+msgstr "Miniatura obrazu dokončena za"
+
+msgid "HD image done for"
+msgstr "HD obraz dokončen za"
+
+msgid "Resized image done for"
+msgstr "Změna velikosti dokončena za"
+
+msgid "Uploaded"
+msgstr "Uploadováno"
+
+msgid "Preparing resized image for"
+msgstr "Příprava zmenšeného obrázku pro"
+
+msgid "Close"
+msgstr "Zavřít"
+
+msgid "on"
+msgstr "na"
+
+msgid "photos added to the selection"
+msgstr "fotky přidány do výběru"
+
+msgid "errors"
+msgstr "chyby"
+
+msgid "Yes, use HD resized of the original photo"
+msgstr "Ano, použij HD velikost původní fotografie"
+
+msgid "Yes, use a copy of the original photo"
+msgstr "Ano, použij kopii původní fotografie"
+
+msgid "HD image width"
+msgstr "šířka HD obrázku"
+
+msgid "HD image height"
+msgstr "výška HD obrázku"
+
+msgid "HD image jpeg quality"
+msgstr "HD obrázek jpeg kvalita"
+
+msgid "HD image filter"
+msgstr "HD filtr obrázku"
+
+msgid "HD image blur"
+msgstr "HD rozmazání obrázku"
+
+msgid "HD image interlace"
+msgstr "HD prokládání obrázku"
+
+msgid "nothing"
+msgstr "nic"
+
+msgid "replace"
+msgstr "nahradit"
+
+msgid "fill if empty (only replace properties currently empty in Piwigo)"
+msgstr "vyplňte pokud je pole prázdné (jen vyplňuje aktuálně prázdná nastavení v Piwigo)"
+
+msgid "append (keep existing and add new)"
+msgstr "připojit (zachovat stávající a přidat nový)"
+
+msgid "Do not ask me again"
+msgstr "Neptej se mě znovu"
+
+msgid "A least one photo has already been added in the past."
+msgstr "Alespoň jedna fotografie byla přidána již v minulosti."
+
+msgid "What shall we do with files? (thumbnail, resized, high resolution)"
+msgstr "Co budeme dělat se soubory fotek? (thumbnail, resized, high resolution)"
+
+msgid "What shall we do with single value properties?(caption, comment, author, create date)"
+msgstr "Co budeme dělat s jednotlivými vlastnostmi? (Titulek, komentář, autor, datum vytvoření)"
+
+msgid "What shall we do with multiple values properties? (categories, tags)"
+msgstr "Co budeme dělat s vícenásobnými vlastnostmi? (kategorie, klíčová slova)"
+
+msgid "Photo update management"
+msgstr "Zpráva aktualizace fotografií"
+
+msgid "Who can see the photo?"
+msgstr "Kdo může vidět fotku?"
+
+msgid "everybody"
+msgstr "všichni"
+
+msgid "contacts"
+msgstr "kontakty"
+
+msgid "friends"
+msgstr "přátelé"
+
+msgid "family"
+msgstr "rodina"
+
+msgid "admins"
+msgstr "administrátoři"
+
+msgid "What shall we do with privacy level?"
+msgstr "Co budeme dělat s úrovní ochrany osobních údajů?"
+
+msgid "Thumbnail and caption"
+msgstr "Náhled a název"
+
+msgid "Property list"
+msgstr "Oprávnění seznam"
+
+msgid "How photo selection is displayed"
+msgstr "Jak se zobrazí výběr fotografií"
+
+msgid "Use original"
+msgstr "Použij originál"
+
+msgid "Use resized original"
+msgstr "Použij zmenšený originál"
+
+msgid "Web sized"
+msgstr "Web velikost"
+
+msgid "Do you want to create"
+msgstr "Chcete vytvořit"
+
+msgid "Transfer"
+msgstr "Přenos"
+
+msgid "Click links below to start using pLoader."
+msgstr "Vyberte odkaz níže pro zahájení práce s aplikací pLoader."
+
+msgid "Add a new album."
+msgstr "Přidat nové album."
+
+msgid "Add photos to the selection."
+msgstr "Přidat fotky do výběru."
+
+msgid "Upload the photo selection into your album."
+msgstr "Nahrát vybrané fotky na web."
Index: /extensions/pLoader/tags/1.6/locale/de_DE/pLoader.po
===================================================================
--- /extensions/pLoader/tags/1.6/locale/de_DE/pLoader.po	(revision 6108)
+++ /extensions/pLoader/tags/1.6/locale/de_DE/pLoader.po	(revision 6108)
@@ -0,0 +1,365 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Piwigo pLoader\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-16 09:54+0100\n"
+"PO-Revision-Date: \n"
+"Last-Translator: Daniel Riedel <news@areasunshine.de>\n"
+"Language-Team: Piwigo team <team@piwigo.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-SearchPath-0: C:/strawberry/perl/site/lib/Uploader/GUI\n"
+"X-Poedit-SearchPath-1: d:/pLoader/res\n"
+
+msgid "Select photos for upload"
+msgstr "Wähle Fotos für den Upload"
+
+msgid "JPEG files"
+msgstr "JPEG-Dateien"
+
+msgid "Default author"
+msgstr "Standartauthor"
+
+msgid "Foto prefix"
+msgstr "Foto präfix"
+
+msgid "Site thumbnail size"
+msgstr "Thumbnail-Größe"
+
+msgid "Site image width"
+msgstr "Bildbreite"
+
+msgid "Site image height"
+msgstr "Bildhöhe"
+
+msgid "Auto rotate image"
+msgstr "Bilder automatisch drehen"
+
+msgid "Upload high (original size) "
+msgstr "Bilder in Originalgröße hochladen"
+
+msgid "Yes"
+msgstr "Ja"
+
+msgid "No"
+msgstr "Nein"
+
+msgid "Admin. username"
+msgstr "Benutzername des Admins"
+
+msgid "Admin. password"
+msgstr "Passwort den Admins"
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Cancel"
+msgstr "Abbrechen"
+
+msgid "Create date"
+msgstr "Erstellungsdatum"
+
+msgid "Width"
+msgstr "Breite"
+
+msgid "Height"
+msgstr "Höhe"
+
+msgid "Orientation"
+msgstr "Orientierung"
+
+msgid "Shutter speed"
+msgstr "Verschlusszeit"
+
+msgid "Aperture"
+msgstr "Blende"
+
+msgid "Focal length"
+msgstr "Brennweite"
+
+msgid "Model"
+msgstr "Modell"
+
+msgid "Lens"
+msgstr "Objektiv"
+
+msgid "Author"
+msgstr "Author"
+
+msgid "Comment"
+msgstr "Kommentar"
+
+msgid "French"
+msgstr "Französisch"
+
+msgid "English"
+msgstr "Englisch"
+
+msgid "Russian"
+msgstr "Russisch"
+
+msgid "Italian"
+msgstr "Italienisch"
+
+msgid "German"
+msgstr "Deutsch"
+
+msgid "Spanish"
+msgstr "Spanisch"
+
+msgid "Portuguese"
+msgstr "Portugiesisch"
+
+msgid "Dutch"
+msgstr "Holländisch"
+
+msgid "Polish"
+msgstr "Polnisch"
+
+msgid "Piwigo categories"
+msgstr "Piwigo Kategorien"
+
+msgid "Photo properties"
+msgstr "Eigenschaften des Fotos"
+
+msgid "Tools"
+msgstr "Tools"
+
+msgid "Global settings"
+msgstr "Globale Einstellungen"
+
+msgid "General"
+msgstr "Generell"
+
+msgid "Resized"
+msgstr "Resized"
+
+msgid "Thumbnail"
+msgstr "Thumbnail"
+
+msgid "Preview"
+msgstr "Vorschau"
+
+msgid "Photo selection"
+msgstr "Fotoauswahl"
+
+msgid "Language choice"
+msgstr "Sprachwahl"
+
+msgid "Choose a language"
+msgstr "Wählen Sie eine Sprache"
+
+msgid "Upload to Piwigo"
+msgstr "Upload zur Piwigo"
+
+msgid "Remove photo from selection"
+msgstr "Lösche Fotos aus der Auswahl"
+
+msgid "Add photo to selection"
+msgstr "Füge Fotos der Auswahl hinzu"
+
+msgid "Not connected"
+msgstr "Nicht verbunden"
+
+msgid "Connection to"
+msgstr "Verbunden"
+
+msgid "failed"
+msgstr "Fehler"
+
+msgid "Piwigo login"
+msgstr "Piwigo login"
+
+msgid "Piwigo login error"
+msgstr "Piwigo login Fehler"
+
+msgid "Please select a valid target category"
+msgstr "Bitte wählen Sie eine gültige Zielkategorie"
+
+msgid "Piwigo upload error"
+msgstr "Piwigo Upload Fehler"
+
+msgid "Category name"
+msgstr "Kategoriename"
+
+msgid "Add new category"
+msgstr "Erstelle eine neue Kategorie"
+
+msgid "New category"
+msgstr "Neue Kategorie"
+
+msgid "Upload cancelled"
+msgstr "Upload abgebrochen"
+
+msgid "Image upload progress information"
+msgstr "Status des Bilder-Uploads"
+
+msgid "Cancel upload"
+msgstr "Breche Upload ab"
+
+msgid "Piwigo upload information"
+msgstr "Information über den Upload"
+
+msgid "Processing"
+msgstr "Fortschritt"
+
+msgid "images processed"
+msgstr "Bilder verarbeitet"
+
+msgid "images uploaded"
+msgstr "Bilder hochgeladen"
+
+msgid "images in errors and not uploaded"
+msgstr "Fehlerhafte Bilder und nicht hochgeladen"
+
+msgid "Duration"
+msgstr "Dauer"
+
+msgid "Categories"
+msgstr "Kategorien"
+
+msgid "categories"
+msgstr "Kategorien"
+
+msgid "Categorie"
+msgstr "Kategorie"
+
+msgid "categorie"
+msgstr "Kategorie"
+
+msgid "Album"
+msgstr "Album"
+
+msgid "Albums"
+msgstr "Alben"
+
+msgid "album"
+msgstr "Album"
+
+msgid "albums"
+msgstr "Alben"
+
+msgid "Photo caption"
+msgstr "Bildunterschrift"
+
+msgid "File name"
+msgstr "Dateiname"
+
+msgid "Default photo caption"
+msgstr "Standart-Bildunterschrift"
+
+msgid "Resize site image"
+msgstr "Für die Website Bildgröße anpassen"
+
+msgid "Auto rotate"
+msgstr "Automatisch drehen"
+
+msgid "Upload high (original size)"
+msgstr "Bilder in Originalgröße hochladen"
+
+msgid "Site image jpeg quality"
+msgstr "JPEG-Qualität"
+
+msgid "Site image filter"
+msgstr "Bildverarbeitungsfilter"
+
+msgid "Site image blur"
+msgstr "Bildschärfe:"
+
+msgid "Site image interlace"
+msgstr "Bildzwischenzeile"
+
+msgid "Site thumbnail jpeg quality"
+msgstr "Thumbnail JPEG Qualität"
+
+msgid "Photo selection thumbnail size"
+msgstr "Größe der Thumbnails der Foto-Auswahl"
+
+msgid "Photo selection thumbnail jpeg quality"
+msgstr "Foto-Auswahl-Thumbnail-JPEG-Qualität"
+
+msgid "Use exif preview when available"
+msgstr "Nutze EXIF-Vorschau wenn möglich"
+
+msgid "Custom preview ratio"
+msgstr "Eigenes Vorschauverhältnis"
+
+msgid "Piwigo url"
+msgstr "URL der Piwigo"
+
+msgid "Connect"
+msgstr "Verbinde"
+
+msgid "Work Offline"
+msgstr "Arbeite Offline"
+
+msgid "Exit"
+msgstr "Beenden"
+
+msgid "empty - work Offline"
+msgstr "leer - arbeite Offline"
+
+msgid "None"
+msgstr "Nichts"
+
+msgid "File path and name"
+msgstr "Dateipfad und Name"
+
+msgid "Prefix"
+msgstr "Präfix"
+
+msgid "Prefix + rank number"
+msgstr "Präfixe + Rangnummer"
+
+msgid "Rank number + prefix"
+msgstr "Rangnummer + präfix"
+
+msgid "Prefix + create date chrono"
+msgstr "Präfix + Erstellungsdatum"
+
+msgid "Create date chrono + prefix"
+msgstr "Erstellungsdatum + präfix"
+
+msgid "Photo"
+msgstr "Foto"
+
+msgid "Image processing progress information"
+msgstr "Fortschritt der Bildverarbeitung"
+
+msgid "Cancel image processing"
+msgstr "Breche Bildverarbeitung ab"
+
+msgid "Add new album"
+msgstr "Füge ein neues Album hinzu"
+
+msgid "Refresh"
+msgstr "Aktualisieren"
+
+msgid "Expand all"
+msgstr "Alle erweitern"
+
+msgid "Collapse all"
+msgstr "Alle einklappen"
+
+msgid "Getting started"
+msgstr "Start"
+
+msgid "Properties"
+msgstr "Voreinstellungen"
+
+msgid "Remove uploaded photo from selection"
+msgstr "Entferne hochgeladene Fotos aus der Auswahl"
+
+msgid "Click links below to start using pLoader."
+msgstr "Klicke die Links um mit dem Ploader zu starten."
+
+msgid "Add a new album."
+msgstr "Erstelle ein neues Album."
+
+msgid "Add photos to the selection."
+msgstr "Füge Fotos der Auswahl hinzu."
+
+msgid "Upload the photo selection into your album."
+msgstr "Lade die Fotos in dein Album hoch."
Index: /extensions/pLoader/tags/1.6/locale/en_EN/gs.html
===================================================================
--- /extensions/pLoader/tags/1.6/locale/en_EN/gs.html	(revision 6108)
+++ /extensions/pLoader/tags/1.6/locale/en_EN/gs.html	(revision 6108)
@@ -0,0 +1,20 @@
+<html>
+<body text="#E15918" link="#E15918">
+    <font size=5 face="verdana, arial">
+    <img src="../res/piwigo_logo.png" />
+    <br />
+    <br />
+    Click links below to start using pLoader.
+    <br />
+    <br />
+    <br />
+    1. <a href="new_album">Add a new album.</a>
+    <br />
+    <br />
+    2. <a href="add_photos">Add photos to the selection.</a>
+    <br />
+    <br />
+    3. <a href="upload_photos">Upload the photo selection into your album.</a>
+    </font>
+</body>
+</html>
Index: /extensions/pLoader/tags/1.6/locale/en_EN/pLoader.po
===================================================================
--- /extensions/pLoader/tags/1.6/locale/en_EN/pLoader.po	(revision 6108)
+++ /extensions/pLoader/tags/1.6/locale/en_EN/pLoader.po	(revision 6108)
@@ -0,0 +1,15 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Piwigo pLoader\n"
+"Language-Team: Piwigo team <team@piwigo.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: ron osman <ron@piwigo.com>\n"
+
+#: ../res/login_wdr.pl:43
+msgid "Admin. username"
+msgstr ""
+
Index: /extensions/pLoader/tags/1.6/locale/en_GB/gs.html
===================================================================
--- /extensions/pLoader/tags/1.6/locale/en_GB/gs.html	(revision 6108)
+++ /extensions/pLoader/tags/1.6/locale/en_GB/gs.html	(revision 6108)
@@ -0,0 +1,20 @@
+<html>
+<body text="#E15918" link="#E15918">
+    <font size=5 face="verdana, arial">
+    <img src="../res/piwigo_logo.png" />
+    <br />
+    <br />
+    Click links below to start using pLoader.
+    <br />
+    <br />
+    <br />
+    1. <a href="new_album">Add a new album.</a>
+    <br />
+    <br />
+    2. <a href="add_photos">Add photos to the selection.</a>
+    <br />
+    <br />
+    3. <a href="upload_photos">Upload the photo selection into your album.</a>
+    </font>
+</body>
+</html>
Index: /extensions/pLoader/tags/1.6/locale/en_US/gs.html
===================================================================
--- /extensions/pLoader/tags/1.6/locale/en_US/gs.html	(revision 6108)
+++ /extensions/pLoader/tags/1.6/locale/en_US/gs.html	(revision 6108)
@@ -0,0 +1,20 @@
+<html>
+<body text="#E15918" link="#E15918">
+    <font size=5 face="verdana, arial">
+    <img src="../res/piwigo_logo.png" />
+    <br />
+    <br />
+    Click links below to start using pLoader.
+    <br />
+    <br />
+    <br />
+    1. <a href="new_album">Add a new album.</a>
+    <br />
+    <br />
+    2. <a href="add_photos">Add photos to the selection.</a>
+    <br />
+    <br />
+    3. <a href="upload_photos">Upload the photo selection into your album.</a>
+    </font>
+</body>
+</html>
Index: /extensions/pLoader/tags/1.6/locale/es_ES/pLoader.po
===================================================================
--- /extensions/pLoader/tags/1.6/locale/es_ES/pLoader.po	(revision 6108)
+++ /extensions/pLoader/tags/1.6/locale/es_ES/pLoader.po	(revision 6108)
@@ -0,0 +1,935 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Piwigo pLoader\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-10-10 11:36+0100\n"
+"PO-Revision-Date: \n"
+"Last-Translator: jpr928 <jprouffy@gmail.com>\n"
+"Language-Team: Piwigo team <team@piwigo.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-SearchPath-0: C:/strawberry/perl/site/lib/Uploader/GUI\n"
+"X-Poedit-SearchPath-1: d:/pLoader/res\n"
+
+#, fuzzy
+msgid "Select photos for upload"
+msgstr "Escoger las fotos que hay que trasladar"
+
+#, fuzzy
+msgid "JPEG files"
+msgstr "Ficheros JPEG"
+
+#, fuzzy
+msgid "Default author"
+msgstr "Autor por defecto:"
+
+#, fuzzy
+msgid "Photo caption  prefix"
+msgstr "Prefijo del título de la foto:"
+
+#, fuzzy
+msgid "Site thumbnail size"
+msgstr "Talla miniatura:"
+
+#, fuzzy
+msgid "Site image width"
+msgstr "Anchura de la imagen"
+
+#, fuzzy
+msgid "Site image height"
+msgstr "Altura de la imagen"
+
+#, fuzzy
+msgid "Auto rotate image"
+msgstr "Rotación automática de la imagen"
+
+#, fuzzy
+msgid "Upload high (original size) "
+msgstr "Cargar la foto original:"
+
+#, fuzzy
+msgid "Upload high definition "
+msgstr "Transferencia alta definición:"
+
+#, fuzzy
+msgid "High definition"
+msgstr "Alta definición:"
+
+#, fuzzy
+msgid "Yes"
+msgstr "Sí"
+
+#, fuzzy
+msgid "No"
+msgstr "No"
+
+#, fuzzy
+msgid "Admin. username"
+msgstr "Identificando a administrador:"
+
+#, fuzzy
+msgid "Admin. password"
+msgstr "Contraseña administrador:"
+
+#, fuzzy
+msgid "OK"
+msgstr "Validar"
+
+#, fuzzy
+msgid "Cancel"
+msgstr "Anular"
+
+#, fuzzy
+msgid "Create date"
+msgstr "Data de creación:"
+
+#, fuzzy
+msgid "Width"
+msgstr "Anchura:"
+
+#, fuzzy
+msgid "Height"
+msgstr "Altura"
+
+#, fuzzy
+msgid "Orientation"
+msgstr "Orientación:"
+
+#, fuzzy
+msgid "Shutter speed"
+msgstr "Velocidad de obturación:"
+
+#, fuzzy
+msgid "Aperture"
+msgstr "Apertura:"
+
+#, fuzzy
+msgid "Focal length"
+msgstr "Longitud focal:"
+
+#, fuzzy
+msgid "Model"
+msgstr "Modelo"
+
+#, fuzzy
+msgid "Lens"
+msgstr "Óptica:"
+
+#, fuzzy
+msgid "Author"
+msgstr "Autor:"
+
+#, fuzzy
+msgid "Comment"
+msgstr "Comentario:"
+
+#, fuzzy
+msgid "Chinese"
+msgstr "Chino"
+
+#, fuzzy
+msgid "Chinese simplified"
+msgstr "Chino simplificado"
+
+#, fuzzy
+msgid "Czech"
+msgstr "Checo"
+
+#, fuzzy
+msgid "Danish"
+msgstr "Danés"
+
+#, fuzzy
+msgid "English"
+msgstr "Inglés"
+
+#, fuzzy
+msgid "German"
+msgstr "Alemán"
+
+#, fuzzy
+msgid "Spanish"
+msgstr "Español"
+
+#, fuzzy
+msgid "French"
+msgstr "Francés"
+
+#, fuzzy
+msgid "Hungarian"
+msgstr "Húngaro"
+
+#, fuzzy
+msgid "Italian"
+msgstr "Italiano"
+
+#, fuzzy
+msgid "Japanese"
+msgstr "Japonés"
+
+#, fuzzy
+msgid "Dutch"
+msgstr "Holandés"
+
+#, fuzzy
+msgid "Polish"
+msgstr "Polaco"
+
+#, fuzzy
+msgid "Portuguese Brazil"
+msgstr "Brasil portugués"
+
+#, fuzzy
+msgid "Portuguese Portugal"
+msgstr "Portugal portugués"
+
+#, fuzzy
+msgid "Russian"
+msgstr "Ruso"
+
+#, fuzzy
+msgid "Slovak"
+msgstr "Eslovaco"
+
+#, fuzzy
+msgid "Brasil"
+msgstr "Brasil"
+
+#, fuzzy
+msgid "pLoader needs to be restarted to display the new selected language"
+msgstr "PLoader debe ser dejado partir para fijar la nueva lengua seleccionada"
+
+#, fuzzy
+msgid "Piwigo categories"
+msgstr "Categorías en Piwigo"
+
+#, fuzzy
+msgid "Photo properties"
+msgstr "Propiedades de la foto"
+
+#, fuzzy
+msgid "Tools"
+msgstr "Herramientas"
+
+#, fuzzy
+msgid "Global settings"
+msgstr "Preferencias"
+
+#, fuzzy
+msgid "Advanced"
+msgstr "Avanzado"
+
+#, fuzzy
+msgid "Transfert chunk size"
+msgstr "Talla bloques de transferencia:"
+
+#, fuzzy
+msgid "General"
+msgstr "General"
+
+#, fuzzy
+msgid "Resized"
+msgstr "Reducción"
+
+#, fuzzy
+msgid "Thumbnail"
+msgstr "Miniatura"
+
+#, fuzzy
+msgid "Preview"
+msgstr "Previsualización"
+
+#, fuzzy
+msgid "Photo selection"
+msgstr "Fotos seleccionadas"
+
+#, fuzzy
+msgid "Language choice"
+msgstr "Elección de la lengua"
+
+#, fuzzy
+msgid "Choose a language"
+msgstr "Escoger una lengua"
+
+#, fuzzy
+msgid "Upload to Piwigo"
+msgstr "Trasladar hacia Piwigo"
+
+#, fuzzy
+msgid "Remove photo from selection"
+msgstr "Llevarse la foto de la selección"
+
+#, fuzzy
+msgid "Add photo to selection"
+msgstr "Añadir la foto a la selección"
+
+#, fuzzy
+msgid "Not connected"
+msgstr "No conectado"
+
+#, fuzzy
+msgid "Connection to"
+msgstr "La conexión a"
+
+#, fuzzy
+msgid "failed"
+msgstr "Fue suspendido"
+
+#, fuzzy
+msgid "Piwigo login"
+msgstr "Conexión en Piwigo"
+
+#, fuzzy
+msgid "Piwigo login error"
+msgstr "Error de conexión en Piwigo"
+
+#, fuzzy
+msgid "Please select a valid target category"
+msgstr "Por favor, seleccione otra categoría"
+
+#, fuzzy
+msgid "Piwigo upload error"
+msgstr "Error de transferencia a Piwigo"
+
+#, fuzzy
+msgid "Category name"
+msgstr "Nombre de la categoría"
+
+#, fuzzy
+msgid "Add new category"
+msgstr "Añadir una nueva categoría"
+
+#, fuzzy
+msgid "New category"
+msgstr "Nueva categoría"
+
+#, fuzzy
+msgid "Upload cancelled"
+msgstr "Transferencia anulada"
+
+#, fuzzy
+msgid "Image upload progress information"
+msgstr "Progresión de la transferencia de imagen"
+
+#, fuzzy
+msgid "Cancel upload"
+msgstr "Anular la transferencia"
+
+#, fuzzy
+msgid "Piwigo upload information"
+msgstr "Información sobre la transferencia a Piwigo"
+
+#, fuzzy
+msgid "Processing"
+msgstr "Tratamiento corriente"
+
+#, fuzzy
+msgid "images processed"
+msgstr "imágenes tratadas"
+
+#, fuzzy
+msgid "images uploaded"
+msgstr "Imágenes trasladadas"
+
+#, fuzzy
+msgid "images in errors and not uploaded"
+msgstr "Imágenes en error y no trasladadas"
+
+#, fuzzy
+msgid "Duration"
+msgstr "Duración"
+
+#, fuzzy
+msgid "seconds"
+msgstr "Segundos"
+
+#, fuzzy
+msgid "Categories"
+msgstr "Categorías"
+
+#, fuzzy
+msgid "categories"
+msgstr "categorías"
+
+#, fuzzy
+msgid "Categorie"
+msgstr "Categoría"
+
+#, fuzzy
+msgid "categorie"
+msgstr "categoría"
+
+#, fuzzy
+msgid "Album"
+msgstr "Álbum"
+
+#, fuzzy
+msgid "Albums"
+msgstr "Álbums"
+
+#, fuzzy
+msgid "album"
+msgstr "álbum"
+
+#, fuzzy
+msgid "albums"
+msgstr "álbums"
+
+#, fuzzy
+msgid "Photo caption"
+msgstr "Título de la foto:"
+
+#, fuzzy
+msgid "File name"
+msgstr "Nombre del fichero:"
+
+#, fuzzy
+msgid "Default photo caption"
+msgstr "Título por defecto:"
+
+#, fuzzy
+msgid "Resize site image"
+msgstr "Reducirse para el sitio:"
+
+#, fuzzy
+msgid "Auto rotate"
+msgstr "Rotación automática:"
+
+#, fuzzy
+msgid "Upload high (original size)"
+msgstr "Trasladar la foto original:"
+
+#, fuzzy
+msgid "Site image jpeg quality"
+msgstr "Calidad JPEG de la foto:"
+
+#, fuzzy
+msgid "Site image filter"
+msgstr "Filtro de reducción:"
+
+#, fuzzy
+msgid "Site image blur"
+msgstr "Acentuación / ligereza:"
+
+#, fuzzy
+msgid "Site image interlace"
+msgstr "Entrelazamiento:"
+
+#, fuzzy
+msgid "Site thumbnail jpeg quality"
+msgstr "Calidad JPEG de las miniaturas del sitio:"
+
+#, fuzzy
+msgid "Photo selection thumbnail size"
+msgstr "Talla miniaturas de la selección foto:"
+
+#, fuzzy
+msgid "Photo selection thumbnail jpeg quality"
+msgstr "Calidad JPEG de las miniaturas de la selección foto:"
+
+#, fuzzy
+msgid "Use exif preview when available"
+msgstr "Utilizar la previsualización extejo:"
+
+#, fuzzy
+msgid "Custom preview ratio"
+msgstr "Ratio de previsualización:"
+
+#, fuzzy
+msgid "Piwigo url"
+msgstr "url del sitio Piwigo"
+
+#, fuzzy
+msgid "Connect"
+msgstr "Conectar"
+
+#, fuzzy
+msgid "Work Offline"
+msgstr "Trabajar fuera de conexión"
+
+#, fuzzy
+msgid "Exit"
+msgstr "Salir"
+
+#, fuzzy
+msgid "empty - work Offline"
+msgstr "Nada que hay que fijar - fuera de conexión"
+
+#, fuzzy
+msgid "None"
+msgstr "Ninguno"
+
+#, fuzzy
+msgid "File path and name"
+msgstr "Camino y nombre del fichero"
+
+#, fuzzy
+msgid "Prefix"
+msgstr "Prefijo"
+
+#, fuzzy
+msgid "Prefix + rank number"
+msgstr "Prefijo + número de fila"
+
+#, fuzzy
+msgid "Rank number + prefix"
+msgstr "Número de fila + prefijo"
+
+#, fuzzy
+msgid "Prefix + create date chrono"
+msgstr "Prefijo + cronómetro data de creación"
+
+#, fuzzy
+msgid "Create date chrono + prefix"
+msgstr "Cronómetro data de creación + prefijo"
+
+#, fuzzy
+msgid "Photo"
+msgstr "Foto"
+
+#, fuzzy
+msgid "Image processing progress information"
+msgstr "Progresión del tratamiento de imagen"
+
+#, fuzzy
+msgid "Cancel image processing"
+msgstr "Anular el tratamiento de imagen"
+
+#, fuzzy
+msgid "Add new album"
+msgstr "Añadir un nuevo álbum"
+
+#, fuzzy
+msgid "Album name"
+msgstr "Nombre del álbum:"
+
+#, fuzzy
+msgid "New album"
+msgstr "Nuevo álbum"
+
+#, fuzzy
+msgid "Refresh"
+msgstr "Actualizar"
+
+#, fuzzy
+msgid "Expand all"
+msgstr "Fijar todo"
+
+#, fuzzy
+msgid "Collapse all"
+msgstr "Reducir todo"
+
+#, fuzzy
+msgid "Getting started"
+msgstr "Arrancar"
+
+#, fuzzy
+msgid "Properties"
+msgstr "Propiedades"
+
+#, fuzzy
+msgid "Remove uploaded photo from selection"
+msgstr "Vaciar la selección foto después de transferencia:"
+
+#, fuzzy
+msgid "Activate watermark"
+msgstr "Acelerar watermark:"
+
+#, fuzzy
+msgid "Activate watermark on high definition"
+msgstr "Acelerar watermark sobre la alta definición:"
+
+#, fuzzy
+msgid "Text"
+msgstr "Texto:"
+
+#, fuzzy
+msgid "Text size"
+msgstr "Talla del texto:"
+
+#, fuzzy
+msgid "Color"
+msgstr "Color:"
+
+#, fuzzy
+msgid "Position"
+msgstr "Posición:"
+
+#, fuzzy
+msgid "Top margin"
+msgstr "Margen arriba:"
+
+#, fuzzy
+msgid "Left margin"
+msgstr "Margen a la izquierda:"
+
+#, fuzzy
+msgid "White"
+msgstr "Blanco"
+
+#, fuzzy
+msgid "Black"
+msgstr "Negro"
+
+#, fuzzy
+msgid "Top"
+msgstr "Altura"
+
+#, fuzzy
+msgid "Top left"
+msgstr "Altura a la izquierda"
+
+#, fuzzy
+msgid "Top right"
+msgstr "Altura a la derecha"
+
+#, fuzzy
+msgid "Bottom"
+msgstr "Bajura"
+
+#, fuzzy
+msgid "Bottom left"
+msgstr "Bajura a la izquierda"
+
+#, fuzzy
+msgid "Bottom right"
+msgstr "Bajura a la derecha"
+
+#, fuzzy
+msgid "Center"
+msgstr "Centrado"
+
+#, fuzzy
+msgid "Left"
+msgstr "Izquierda"
+
+#, fuzzy
+msgid "Right"
+msgstr "Derecha"
+
+#, fuzzy
+msgid "my watermark"
+msgstr "Mi watermark"
+
+#, fuzzy
+msgid "Show"
+msgstr "Espectáculo"
+
+#, fuzzy
+msgid "All"
+msgstr "Todo"
+
+#, fuzzy
+msgid "Selected"
+msgstr "Seleccionado"
+
+#, fuzzy
+msgid "Not selected"
+msgstr "No conectado"
+
+#, fuzzy
+msgid "Uploading"
+msgstr "Traslada"
+
+#, fuzzy
+msgid "Uploading resized"
+msgstr "Traslada la foto reducida"
+
+#, fuzzy
+msgid "Uploading thumbnail"
+msgstr "Traslada la miniatura"
+
+#, fuzzy
+msgid "Uploading high definition"
+msgstr "Traslada la foto HD"
+
+#, fuzzy
+msgid "Checksum for"
+msgstr "Sueño de control"
+
+#, fuzzy
+msgid "Communication error with"
+msgstr "Error de comunicación con"
+
+#, fuzzy
+msgid "Thumbnail image done for"
+msgstr "Miniatura de la imagen acabada para"
+
+#, fuzzy
+msgid "HD image done for"
+msgstr "Llena de imágenes alta definición acabada para"
+
+#, fuzzy
+msgid "Resized image done for"
+msgstr "Imagen reducida acabada para"
+
+#, fuzzy
+msgid "Uploaded"
+msgstr "Trasladado"
+
+#, fuzzy
+msgid "Preparing resized image for"
+msgstr "Prepara la foto reducida de"
+
+#, fuzzy
+msgid "Close"
+msgstr "Cerrarse"
+
+#, fuzzy
+msgid "on"
+msgstr "sobre"
+
+#, fuzzy
+msgid "photos added to the selection"
+msgstr "fotos añadidas a la selección"
+
+#, fuzzy
+msgid "errors"
+msgstr "Errores"
+
+#, fuzzy
+msgid "Yes, use HD resized of the original photo"
+msgstr "Sí, utilizar una reducción HD de la foto original"
+
+#, fuzzy
+msgid "Yes, use a copy of the original photo"
+msgstr "Sí, utilizar una copia de la foto original"
+
+#, fuzzy
+msgid "HD image width"
+msgstr "Anchura de la imagen HD:"
+
+#, fuzzy
+msgid "HD image height"
+msgstr "Altura de la imagen HD:"
+
+#, fuzzy
+msgid "HD image jpeg quality"
+msgstr "Calidad JPEG de la imagen HD:"
+
+#, fuzzy
+msgid "HD image filter"
+msgstr "Filtro de reducción de la imagen HD:"
+
+#, fuzzy
+msgid "HD image blur"
+msgstr "Acentuación / ligereza de la imagen HD:"
+
+#, fuzzy
+msgid "HD image interlace"
+msgstr "Entrelazamiento de la imagen HD:"
+
+#, fuzzy
+msgid "nothing"
+msgstr "No hacer nada"
+
+#, fuzzy
+msgid "replace"
+msgstr "Reemplazar"
+
+#, fuzzy
+msgid "fill if empty (only replace properties currently empty in Piwigo)"
+msgstr "Cumplir si no informado (reemplazar sólo las propiedades vacías en Piwigo)"
+
+#, fuzzy
+msgid "append (keep existing and add new)"
+msgstr "Acumular (guardar el existente y añadir)"
+
+#, fuzzy
+msgid "Do not ask me again"
+msgstr "Más pedirme"
+
+#, fuzzy
+msgid "A least one photo has already been added in the past."
+msgstr "Por lo menos una foto ya ha sido añadida en el pasado."
+
+#, fuzzy
+msgid "What shall we do with files? (thumbnail, resized, high resolution)"
+msgstr "¿ Que hacer para los ficheros? (Miniatura, talla web, alta definición)"
+
+#, fuzzy
+msgid "What shall we do with single value properties?(caption, comment, author, create date)"
+msgstr "¿ Que hacer para las propiedades simples? (Título(acción), comentario, autor, fecha de creación)"
+
+#, fuzzy
+msgid "What shall we do with multiple values properties? (categories, tags)"
+msgstr "¿ Que hacer para las propiedades a valores múltiples? (Categorías, tags)"
+
+#, fuzzy
+msgid "Photo update management"
+msgstr "Gestión de la puesta al día de las fotos"
+
+#, fuzzy
+msgid "Who can see the photo?"
+msgstr "¿ Quién puede ver la foto?:"
+
+#, fuzzy
+msgid "everybody"
+msgstr "Todo el mundo"
+
+#, fuzzy
+msgid "contacts"
+msgstr "contactos"
+
+#, fuzzy
+msgid "friends"
+msgstr "amigos"
+
+#, fuzzy
+msgid "family"
+msgstr "familia"
+
+#, fuzzy
+msgid "admins"
+msgstr "Administradores"
+
+#, fuzzy
+msgid "What shall we do with privacy level?"
+msgstr "¿ Que hacer para el nivel de confidencialidad?"
+
+#, fuzzy
+msgid "Thumbnail and caption"
+msgstr "Miniatura y título"
+
+#, fuzzy
+msgid "Property list"
+msgstr "Lista de propiedades"
+
+#, fuzzy
+msgid "How photo selection is displayed"
+msgstr "Cómo la selección de fotos es fijada"
+
+#, fuzzy
+msgid "Use original"
+msgstr "Utilizar el original"
+
+#, fuzzy
+msgid "Use resized original"
+msgstr "Redimensionar el original"
+
+#, fuzzy
+msgid "Web sized"
+msgstr "Foto talla web"
+
+#, fuzzy
+msgid "Do you want to create"
+msgstr "Por favor, créese"
+
+#, fuzzy
+msgid "Transfer"
+msgstr "Transferencia"
+
+#, fuzzy
+msgid "Click links below to start using pLoader."
+msgstr "Haga clic en los lazos para comenzar con pLoader."
+
+#, fuzzy
+msgid "Add a new album."
+msgstr "Crear un nuevo álbum."
+
+#, fuzzy
+msgid "Add photos to the selection."
+msgstr "Añadir fotos a la selección."
+
+#, fuzzy
+msgid "Upload the photo selection into your album."
+msgstr "Trasladar en un álbum."
+
+#, fuzzy
+msgid "Photo size"
+msgstr "Dimensión de las fotos"
+
+#, fuzzy
+msgid "Maximum width"
+msgstr "Anchura máxima"
+
+#, fuzzy
+msgid "Maximum height"
+msgstr "Altura máxima"
+
+#, fuzzy
+msgid "What is the destination category?"
+msgstr "¿ Cuál es la categoría destino?"
+
+#, fuzzy
+msgid "What is the destination album?"
+msgstr "¿ Cuál es el álbum destino?"
+
+#, fuzzy
+msgid "Caption"
+msgstr "Título"
+
+#, fuzzy
+msgid "Who can see?"
+msgstr "¿ Quién puede ver?"
+
+#, fuzzy
+msgid "You have selected a batch of %s photos"
+msgstr "Usted seleccionó un lote de %s fotos"
+
+#, fuzzy
+msgid "Changes apply to the whole batch"
+msgstr "Las modificaciones se aplican a todas las fotos de la selección"
+
+#, fuzzy
+msgid "Drag photos here to get started"
+msgstr "Depositas sus fotos aquí para empezar"
+
+#, fuzzy
+msgid "Or click"
+msgstr "O haga clic sobre"
+
+#, fuzzy
+msgid "to choose files on your computer"
+msgstr "Para escoger ficheros de su ordenador"
+
+#, fuzzy
+msgid "Add photos"
+msgstr "Añadir fotos"
+
+#, fuzzy
+msgid "Remove selected photos"
+msgstr "Quitar las fotos seleccionadas"
+
+#, fuzzy
+msgid "Default caption pattern"
+msgstr "Tamaño de título por defecto"
+
+#, fuzzy
+msgid "Default caption"
+msgstr "Título por defecto"
+
+#, fuzzy
+msgid "Caption + rank number"
+msgstr "Título + N ° de orden"
+
+#, fuzzy
+msgid "Rank number + caption"
+msgstr "N ° de orden + título"
+
+#, fuzzy
+msgid "Caption + create date chrono"
+msgstr "Título + cronómetro fecha de creación"
+
+#, fuzzy
+msgid "Create date chrono + caption"
+msgstr "Cronómetro fecha de creación + título"
+
+#, fuzzy
+msgid "Create date chrono + rank"
+msgstr "Cronómetro fecha de creación +  N ° de orden"
+
+#, fuzzy
+msgid "Rank + create date chrono"
+msgstr "N ° de orden + cronómetro fecha de creación"
+
+#, fuzzy
+msgid "Preferences"
+msgstr "Preferencias"
+
+#, fuzzy
+msgid "Selection"
+msgstr "Selección"
+
Index: /extensions/pLoader/tags/1.6/locale/fr_FR/pLoader.po
===================================================================
--- /extensions/pLoader/tags/1.6/locale/fr_FR/pLoader.po	(revision 6108)
+++ /extensions/pLoader/tags/1.6/locale/fr_FR/pLoader.po	(revision 6108)
@@ -0,0 +1,722 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Piwigo pLoader\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-10-10 11:36+0100\n"
+"PO-Revision-Date: \n"
+"Last-Translator: Karim AGREBI <rio@piwigo.org>\n"
+"Language-Team: Piwigo team <team@piwigo.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-SearchPath-0: C:/strawberry/perl/site/lib/Uploader/GUI\n"
+"X-Poedit-SearchPath-1: d:/pLoader/res\n"
+
+msgid "Select photos for upload"
+msgstr "Choisir les photos à transférer"
+
+msgid "JPEG files"
+msgstr "Fichiers JPEG"
+
+msgid "Default author"
+msgstr "Auteur par défaut"
+
+msgid "Photo caption  prefix"
+msgstr "Préfixe du titre de la photo"
+
+msgid "Site thumbnail size"
+msgstr "Taille des miniatures"
+
+msgid "Site image width"
+msgstr "Largeur de l'image"
+
+msgid "Site image height"
+msgstr "Hauteur de l'image"
+
+msgid "Auto rotate image"
+msgstr "Rotation automatique de l'image"
+
+msgid "Upload high (original size) "
+msgstr "Transfert haute définition ( taille originale )"
+
+msgid "Upload high definition "
+msgstr "Transfert haute définition"
+
+msgid "High definition"
+msgstr "Haute définition"
+
+msgid "Yes"
+msgstr "Oui"
+
+msgid "No"
+msgstr "Non"
+
+msgid "Admin. username"
+msgstr "Identifiant administrateur"
+
+msgid "Admin. password"
+msgstr "Mot de passe administrateur"
+
+msgid "OK"
+msgstr "Valider"
+
+msgid "Cancel"
+msgstr "Annuler"
+
+msgid "Create date"
+msgstr "Date de création"
+
+msgid "Width"
+msgstr "Largeur"
+
+msgid "Height"
+msgstr "Hauteur"
+
+msgid "Orientation"
+msgstr "Orientation"
+
+msgid "Shutter speed"
+msgstr "Vitesse d'obturation"
+
+msgid "Aperture"
+msgstr "Ouverture"
+
+msgid "Focal length"
+msgstr "Longueur focale"
+
+msgid "Model"
+msgstr "Modèle"
+
+msgid "Lens"
+msgstr "Optique"
+
+msgid "Author"
+msgstr "Auteur"
+
+msgid "Comment"
+msgstr "Commentaire"
+
+msgid "Chinese"
+msgstr "Chinois"
+
+msgid "Chinese simplified"
+msgstr "Chinois simplifié"
+
+msgid "Czech"
+msgstr "Tchèque"
+
+msgid "Danish"
+msgstr "Danois"
+
+msgid "English"
+msgstr "Anglais"
+
+msgid "German"
+msgstr "Allemand"
+
+msgid "Spanish"
+msgstr "Espagnol"
+
+msgid "French"
+msgstr "Français"
+
+msgid "Hungarian"
+msgstr "Hongrois"
+
+msgid "Italian"
+msgstr "Italien"
+
+msgid "Japanese"
+msgstr "Japonais"
+
+msgid "Dutch"
+msgstr "Hollandais"
+
+msgid "Polish"
+msgstr "Polonais"
+
+msgid "Portuguese Brazil"
+msgstr "Portugais Brésil"
+
+msgid "Portuguese Portugal"
+msgstr "Portugais Portugal"
+
+msgid "Russian"
+msgstr "Russe"
+
+msgid "Slovak"
+msgstr "Slovaque"
+
+msgid "Brasil"
+msgstr "Brésilien"
+
+msgid "pLoader needs to be restarted to display the new selected language"
+msgstr "pLoader doit être relancé pour afficher la nouvelle langue sélectionnée"
+
+msgid "Piwigo categories"
+msgstr "Catégories dans Piwigo"
+
+msgid "Photo properties"
+msgstr "Propriétés de la photo"
+
+msgid "Tools"
+msgstr "Outils"
+
+msgid "Global settings"
+msgstr "Préférences"
+
+msgid "Advanced"
+msgstr "Avancé"
+
+msgid "Transfert chunk size"
+msgstr "Taille des blocs de transfert"
+
+msgid "General"
+msgstr "Général"
+
+msgid "Resized"
+msgstr "Réduction"
+
+msgid "Thumbnail"
+msgstr "Miniature"
+
+msgid "Preview"
+msgstr "Prévisualisation"
+
+msgid "Photo selection"
+msgstr "Photos sélectionnées"
+
+msgid "Language choice"
+msgstr "Choix de la langue"
+
+msgid "Choose a language"
+msgstr "Choisir une langue"
+
+msgid "Upload to Piwigo"
+msgstr "Transférer vers Piwigo"
+
+msgid "Remove photo from selection"
+msgstr "Enlever la photo de la sélection"
+
+msgid "Add photo to selection"
+msgstr "Ajouter la photo à la sélection"
+
+msgid "Not connected"
+msgstr "Non connecté"
+
+msgid "Connection to"
+msgstr "La connection à"
+
+msgid "failed"
+msgstr "a échoué"
+
+msgid "Piwigo login"
+msgstr "Connection à Piwigo"
+
+msgid "Piwigo login error"
+msgstr "Erreur de connection à Piwigo"
+
+msgid "Please select a valid target category"
+msgstr "Veuillez sélectionner une autre catégorie"
+
+msgid "Piwigo upload error"
+msgstr "Erreur de transfert vers Piwigo"
+
+msgid "Category name"
+msgstr "Nom de la catégorie"
+
+msgid "Add new category"
+msgstr "Ajouter une nouvelle catégorie"
+
+msgid "New category"
+msgstr "Nouvelle catégorie"
+
+msgid "Upload cancelled"
+msgstr "Transfert annulé"
+
+msgid "Image upload progress information"
+msgstr "Progression du transfert d'image"
+
+msgid "Cancel upload"
+msgstr "Annuler le transfert"
+
+msgid "Piwigo upload information"
+msgstr "Information sur le transfert vers Piwigo"
+
+msgid "Processing"
+msgstr "Traitement en cours"
+
+msgid "images processed"
+msgstr "images traitées"
+
+msgid "images uploaded"
+msgstr "images transférées"
+
+msgid "images in errors and not uploaded"
+msgstr "images en erreur et non transférées"
+
+msgid "Duration"
+msgstr "Durée"
+
+msgid "seconds"
+msgstr "secondes"
+
+msgid "Categories"
+msgstr "Catégories"
+
+msgid "categories"
+msgstr "catégories"
+
+msgid "Categorie"
+msgstr "Catégorie"
+
+msgid "categorie"
+msgstr "catégorie"
+
+msgid "Album"
+msgstr "Album"
+
+msgid "Albums"
+msgstr "Albums"
+
+msgid "album"
+msgstr "album"
+
+msgid "albums"
+msgstr "albums"
+
+msgid "Photo caption"
+msgstr "Titre de la photo"
+
+msgid "File name"
+msgstr "Nom du fichier"
+
+msgid "Default photo caption"
+msgstr "Titre par défaut"
+
+msgid "Resize site image"
+msgstr "Réduire pour le site"
+
+msgid "Auto rotate"
+msgstr "Rotation automatique"
+
+msgid "Upload high (original size)"
+msgstr "Transférer la photo originale"
+
+msgid "Site image jpeg quality"
+msgstr "Qualité jpeg de la photo"
+
+msgid "Site image filter"
+msgstr "Filtre de réduction"
+
+msgid "Site image blur"
+msgstr "Accentuation/flou"
+
+msgid "Site image interlace"
+msgstr "Entrelacement"
+
+msgid "Site thumbnail jpeg quality"
+msgstr "Qualité jpeg des miniatures du site"
+
+msgid "Photo selection thumbnail size"
+msgstr "Taille des miniatures de la sélection photo"
+
+msgid "Photo selection thumbnail jpeg quality"
+msgstr "Qualité jpeg des miniatures de la sélection photo"
+
+msgid "Use exif preview when available"
+msgstr "Utiliser la prévisualisation  exif"
+
+msgid "Custom preview ratio"
+msgstr "Ratio de prévisualisation"
+
+msgid "Piwigo url"
+msgstr "Adresse du site Piwigo"
+
+msgid "Connect"
+msgstr "Connecter"
+
+msgid "Work Offline"
+msgstr "Travailler hors connection"
+
+msgid "Exit"
+msgstr "Sortir"
+
+msgid "empty - work Offline"
+msgstr "rien à afficher - hors connection"
+
+msgid "None"
+msgstr "Aucun"
+
+msgid "File path and name"
+msgstr "Chemin et nom du fichier"
+
+msgid "Prefix"
+msgstr "Préfixe"
+
+msgid "Prefix + rank number"
+msgstr "Préfixe + N° d'ordre"
+
+msgid "Rank number + prefix"
+msgstr "N° d'ordre + préfixe"
+
+msgid "Prefix + create date chrono"
+msgstr "Préfixe + chrono date de création"
+
+msgid "Create date chrono + prefix"
+msgstr "Chrono date de création + préfixe"
+
+msgid "Photo"
+msgstr "Photo"
+
+msgid "Image processing progress information"
+msgstr "Progression du traitement d'image"
+
+msgid "Cancel image processing"
+msgstr "Annuler le traitement d'image"
+
+msgid "Add new album"
+msgstr "Ajouter un nouvel album"
+
+msgid "Album name"
+msgstr "Nom de l'album"
+
+msgid "New album"
+msgstr "Nouvel album"
+
+msgid "Refresh"
+msgstr "Actualiser"
+
+msgid "Expand all"
+msgstr "Afficher tout"
+
+msgid "Collapse all"
+msgstr "Réduire tout"
+
+msgid "Getting started"
+msgstr "Démarrer"
+
+msgid "Properties"
+msgstr "Propriétés"
+
+msgid "Remove uploaded photo from selection"
+msgstr "Vider la sélection photo après transfert"
+
+msgid "Activate watermark"
+msgstr "Activer watermark"
+
+msgid "Activate watermark on high definition"
+msgstr "Activer watermark sur la haute définition"
+
+msgid "Text"
+msgstr "Texte"
+
+msgid "Text size"
+msgstr "Taille du texte"
+
+msgid "Color"
+msgstr "Couleur"
+
+msgid "Position"
+msgstr "Position"
+
+msgid "Top margin"
+msgstr "Marge en haut"
+
+msgid "Left margin"
+msgstr "Marge à gauche"
+
+msgid "White"
+msgstr "Blanc"
+
+msgid "Black"
+msgstr "Noir"
+
+msgid "Top"
+msgstr "Haut"
+
+msgid "Top left"
+msgstr "Haut à gauche"
+
+msgid "Top right"
+msgstr "Haut à droite"
+
+msgid "Bottom"
+msgstr "Bas"
+
+msgid "Bottom left"
+msgstr "Bas à gauche"
+
+msgid "Bottom right"
+msgstr "Bas à droite"
+
+msgid "Center"
+msgstr "Centre"
+
+msgid "Left"
+msgstr "Gauche"
+
+msgid "Right"
+msgstr "Droite"
+
+msgid "my watermark"
+msgstr "mon watermark"
+
+msgid "Show"
+msgstr "Afficher"
+
+msgid "All"
+msgstr "Tout"
+
+msgid "Selected"
+msgstr "Sélectionnés"
+
+msgid "Not selected"
+msgstr "Non sélectionnés"
+
+msgid "Uploading"
+msgstr "Transfère"
+
+msgid "Uploading resized"
+msgstr "Transfère la photo réduite"
+
+msgid "Uploading thumbnail"
+msgstr "Transfère la miniature"
+
+msgid "Uploading high definition"
+msgstr "Transfère la photo HD"
+
+msgid "Checksum for"
+msgstr "Checksum de"
+
+msgid "Communication error with"
+msgstr "Erreur de communication avec"
+
+msgid "Thumbnail image done for"
+msgstr "Miniature de l'image terminée pour"
+
+msgid "HD image done for"
+msgstr "Image haute définition terminée pour"
+
+msgid "Resized image done for"
+msgstr "Image réduite terminée pour"
+
+msgid "Uploaded"
+msgstr "Transféré"
+
+msgid "Preparing resized image for"
+msgstr "Prépare la photo réduite de"
+
+msgid "Close"
+msgstr "Fermer"
+
+msgid "on"
+msgstr "sur"
+
+msgid "photos added to the selection"
+msgstr "photos ajoutées à la sélection"
+
+msgid "errors"
+msgstr "erreurs"
+
+msgid "Yes, use HD resized of the original photo"
+msgstr "Oui, une réduction HD de la photo originale"
+
+msgid "Yes, use a copy of the original photo"
+msgstr "Oui, une copie de la photo originale"
+
+msgid "HD image width"
+msgstr "Largeur de l'image HD"
+
+msgid "HD image height"
+msgstr "Hauteur de l'image HD"
+
+msgid "HD image jpeg quality"
+msgstr "Qualité jpeg de l'image HD"
+
+msgid "HD image filter"
+msgstr "Filtre de réduction de l'image HD"
+
+msgid "HD image blur"
+msgstr "Accentuation/flou de l'image HD"
+
+msgid "HD image interlace"
+msgstr "Entrelacement de l'image HD"
+
+msgid "nothing"
+msgstr "ne rien faire"
+
+msgid "replace"
+msgstr "remplacer"
+
+msgid "fill if empty (only replace properties currently empty in Piwigo)"
+msgstr "remplir si non renseigné (ne remplacer que les propriétés vides dans Piwigo)"
+
+msgid "append (keep existing and add new)"
+msgstr "cumuler (garder l'existant et ajouter)"
+
+msgid "Do not ask me again"
+msgstr "Ne plus me demander"
+
+msgid "A least one photo has already been added in the past."
+msgstr "Au moins une photo a déjà été ajoutée dans le passé."
+
+msgid "What shall we do with files? (thumbnail, resized, high resolution)"
+msgstr "Que faire pour les fichiers ? (miniature, taille web, haute définition)"
+
+msgid "What shall we do with single value properties?(caption, comment, author, create date)"
+msgstr "Que faire pour les propriétés simples ? (titre, commentaire, auteur, date de création)"
+
+msgid "What shall we do with multiple values properties? (categories, tags)"
+msgstr "Que faire pour les propriétés à valeurs multiples ? (catégories, tags)"
+
+msgid "Photo update management"
+msgstr "Gestion de la mise à jour des photos"
+
+msgid "Who can see the photo?"
+msgstr "Qui peut voir la photo ?"
+
+msgid "everybody"
+msgstr "tout le monde"
+
+msgid "contacts"
+msgstr "contacts"
+
+msgid "friends"
+msgstr "amis"
+
+msgid "family"
+msgstr "famille"
+
+msgid "admins"
+msgstr "administrateurs"
+
+msgid "What shall we do with privacy level?"
+msgstr "Que faire pour le niveau de confidentialité ?"
+
+msgid "Thumbnail and caption"
+msgstr "Miniature et titre"
+
+msgid "Property list"
+msgstr "Liste de propriétés"
+
+msgid "How photo selection is displayed"
+msgstr "Comment la sélection de photos est affichée"
+
+msgid "Use original"
+msgstr "Utiliser l'original"
+
+msgid "Use resized original"
+msgstr "Redimensionner l'original"
+
+msgid "Web sized"
+msgstr "Photo taille web"
+
+msgid "Do you want to create"
+msgstr "Voulez vous créer"
+
+msgid "Transfer"
+msgstr "Transfert"
+
+msgid "Click links below to start using pLoader."
+msgstr "Cliquez sur les liens pour commencer avec pLoader."
+
+msgid "Add a new album."
+msgstr "Créer un nouvel album."
+
+msgid "Add photos to the selection."
+msgstr "Ajouter des photos à la sélection."
+
+msgid "Upload the photo selection into your album."
+msgstr "Transférer dans un album."
+
+msgid "Photo size"
+msgstr "Dimension des photos"
+
+msgid "Maximum width"
+msgstr "Largeur maximale"
+
+msgid "Maximum height"
+msgstr "Hauteur maximale"
+
+msgid "What is the destination category?"
+msgstr "Quelle est la catégorie destination ?"
+
+msgid "What is the destination album?"
+msgstr "Quel est l'album destination ?"
+
+msgid "Caption"
+msgstr "Titre"
+
+msgid "Who can see?"
+msgstr "Qui peut voir ?"
+
+msgid "You have selected a batch of %s photos"
+msgstr "Vous avez sélectionné un lot de %s photos"
+
+msgid "Changes apply to the whole batch"
+msgstr "Les modifications s'appliquent à toutes les photos de la sélection"
+
+msgid "Drag photos here to get started"
+msgstr "Glissez-déposez vos photos ici pour démarrer"
+
+msgid "Or click"
+msgstr "Ou cliquez sur"
+
+msgid "to choose files on your computer"
+msgstr "pour choisir des fichiers de votre ordinateur"
+
+msgid "Add photos"
+msgstr "Ajouter des photos"
+
+msgid "Remove selected photos"
+msgstr "Enlever les photos sélectionnées"
+
+msgid "Default caption pattern"
+msgstr "Format de titre par défaut"
+
+msgid "Default caption"
+msgstr "Titre par défaut"
+
+msgid "Caption + rank number"
+msgstr "Titre + N° d'ordre"
+
+msgid "Rank number + caption"
+msgstr "N° d'ordre + titre"
+
+msgid "Caption + create date chrono"
+msgstr "Titre + chrono date de création"
+
+msgid "Create date chrono + caption"
+msgstr "Chrono date de création + titre"
+
+msgid "Create date chrono + rank"
+msgstr "Chrono date de création + N° d'ordre"
+
+msgid "Rank + create date chrono"
+msgstr "N° d'ordre + chrono date de création"
+
+msgid "Preferences"
+msgstr "Préférences"
+
+msgid "Selection"
+msgstr "Sélection"
+
+msgid "Your user account is not granted to upload photos"
+msgstr "Les droits associés à votre compte ne permettent pas le transfert de photos"
+
+msgid "Add photos for resizing and uploading"
+msgstr "Ajoute des photos à redimensionner et transférer"
+
+msgid "Remove selected photos. Original files are not deleted"
+msgstr "Enlève les photos sélectionnées. Les fichiers originaux ne sont pas supprimés"
+
+msgid "Change global settings"
+msgstr "Change les réglages"
+
+msgid "Rectangular"
+msgstr "Rectangulaire"
+
+msgid "Square"
+msgstr "Carrée"
Index: /extensions/pLoader/tags/1.6/locale/hu_HU/pLoader.po
===================================================================
--- /extensions/pLoader/tags/1.6/locale/hu_HU/pLoader.po	(revision 6108)
+++ /extensions/pLoader/tags/1.6/locale/hu_HU/pLoader.po	(revision 6108)
@@ -0,0 +1,693 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Piwigo pLoader\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-10-10 11:36+0100\n"
+"PO-Revision-Date: \n"
+"Last-Translator: sámli <gyula54@gmail.com>\n"
+"Language-Team: Hungarian Piwigo team <info@cmsaward.hu>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-Language: Hungarian\n"
+"X-Poedit-Country: HUNGARY\n"
+
+msgid "Select photos for upload"
+msgstr "Válassza ki a feltöltendő képeket"
+
+msgid "JPEG files"
+msgstr "JPEG-kép"
+
+msgid "Default author"
+msgstr "Alapértelmezett szerző:"
+
+msgid "Photo caption  prefix"
+msgstr "Kép képaláírás előtag:"
+
+msgid "Site thumbnail size"
+msgstr "Bélyegkép mérete:"
+
+msgid "Site image width"
+msgstr "Kép szélesség:"
+
+msgid "Site image height"
+msgstr "Kép magasság:"
+
+msgid "Auto rotate image"
+msgstr "Kép automatikus forgatása"
+
+msgid "Upload high (original size) "
+msgstr "Kép feltöltés (eredeti méret)"
+
+msgid "Upload high definition "
+msgstr "HD kép feltöltés"
+
+msgid "High definition"
+msgstr "Nagy felbontás"
+
+msgid "Yes"
+msgstr "Igen"
+
+msgid "No"
+msgstr "Nem"
+
+msgid "Admin. username :"
+msgstr "Rendszergazda felhasználónév :"
+
+msgid "Admin. password :"
+msgstr "Rendszergazda jelszó :"
+
+msgid "OK"
+msgstr "Rendben"
+
+msgid "Cancel"
+msgstr "Mégsem"
+
+msgid "Create date"
+msgstr "Készítés időpontja:"
+
+msgid "Width"
+msgstr "Szélesség:"
+
+msgid "Height"
+msgstr "Magasság:"
+
+msgid "Orientation"
+msgstr "Elhelyezkedés:"
+
+msgid "Shutter speed"
+msgstr "Zársebesség:"
+
+msgid "Aperture"
+msgstr "Blende:"
+
+msgid "Focal length"
+msgstr "Gyújtótávolság:"
+
+msgid "Model"
+msgstr "Modell:"
+
+msgid "Lens"
+msgstr "Objektív:"
+
+msgid "Author"
+msgstr "Szerző:"
+
+msgid "Comment"
+msgstr "Megjegyzés:"
+
+msgid "Chinese"
+msgstr "Kínai"
+
+msgid "Chinese simplified"
+msgstr "Kínai (egyszerű)"
+
+msgid "Czech"
+msgstr "Cseh"
+
+msgid "Danish"
+msgstr "Dán"
+
+msgid "English"
+msgstr "Angol"
+
+msgid "German"
+msgstr "Német"
+
+msgid "Spanish"
+msgstr "Spanyol"
+
+msgid "French"
+msgstr "Francia"
+
+msgid "Hungarian"
+msgstr "Magyar"
+
+msgid "Italian"
+msgstr "Olasz"
+
+msgid "Japanese"
+msgstr "Japán"
+
+msgid "Dutch"
+msgstr "Holland"
+
+msgid "Polish"
+msgstr "Lengyel"
+
+msgid "Portuguese Brazil"
+msgstr "Brazil Portugál"
+
+msgid "Portuguese Portugal"
+msgstr "Portugál Portugál"
+
+msgid "Russian"
+msgstr "Orosz"
+
+msgid "Slovak"
+msgstr "Szlovák"
+
+msgid "Brasil"
+msgstr "Brazil"
+
+msgid "pLoader needs to be restarted to display the new selected language"
+msgstr "Az új nyelv használatához újra kell indítania a pLoader programot"
+
+msgid "Piwigo categories"
+msgstr "Kategóriák"
+
+msgid "Photo properties"
+msgstr "Kép tulajdonságok"
+
+msgid "Tools"
+msgstr "Eszközök"
+
+msgid "Global settings"
+msgstr "Általános beállítások"
+
+msgid "Advanced"
+msgstr "Haladó"
+
+msgid "Transfert chunk size"
+msgstr "Az átvitt blokk mérete:"
+
+msgid "General"
+msgstr "Általános"
+
+msgid "Resized"
+msgstr "Átméretezett"
+
+msgid "Thumbnail"
+msgstr "Bélyegkép"
+
+msgid "Preview"
+msgstr "Előnézet"
+
+msgid "Photo selection"
+msgstr "Kép kiválasztása"
+
+msgid "Language choice"
+msgstr "Nyelv kiválasztása"
+
+msgid "Choose a language"
+msgstr "Válasszon nyelvet"
+
+msgid "Upload to Piwigo"
+msgstr "Feltöltés galériába"
+
+msgid "Remove photo from selection"
+msgstr "Kiválasztott képek törlése"
+
+msgid "Add photo to selection"
+msgstr "Feltöltendő képek kiválasztása"
+
+msgid "Not connected"
+msgstr "Nincs kapcsolat"
+
+msgid "Connection to"
+msgstr "Kapcsolódás"
+
+msgid "failed"
+msgstr "hiba"
+
+msgid "Piwigo login"
+msgstr "Bejelentkezés a galériába"
+
+msgid "Piwigo login error"
+msgstr "Hiba a bejelentkezéskor"
+
+msgid "Please select a valid target category"
+msgstr "Válasszon egy érvényes cél kategóriát"
+
+msgid "Piwigo upload error"
+msgstr "Galéria feltöltési hiba"
+
+msgid "Category name"
+msgstr "Kategória neve:"
+
+msgid "Add new category"
+msgstr "Új kategória hozzáadása"
+
+msgid "New category"
+msgstr "Új kategória"
+
+msgid "Upload cancelled"
+msgstr "Feltöltés megszakítása"
+
+msgid "Image upload progress information"
+msgstr "Kép feltöltés haladó információk"
+
+msgid "Cancel upload"
+msgstr "Feltöltés megszakítása"
+
+msgid "Piwigo upload information"
+msgstr "Galéria feltöltési információk"
+
+msgid "Processing"
+msgstr "Feldolgozás"
+
+msgid "images processed"
+msgstr "Kép feldolgozása"
+
+msgid "images uploaded"
+msgstr "Feltöltött képek"
+
+msgid "images in errors and not uploaded"
+msgstr "Hibás feltöltés (nem feltöltött)"
+
+msgid "Duration"
+msgstr "Időtartam"
+
+msgid "seconds"
+msgstr "másodperc"
+
+msgid "Categories"
+msgstr "Kategóriák"
+
+msgid "categories"
+msgstr "kategóriák"
+
+msgid "Categorie"
+msgstr "Kategória"
+
+msgid "categorie"
+msgstr "kategória"
+
+msgid "Album"
+msgstr "Album"
+
+msgid "Albums"
+msgstr "Albumok"
+
+msgid "album"
+msgstr "album"
+
+msgid "albums"
+msgstr "albumok"
+
+msgid "Photo caption"
+msgstr "Kép felirat:"
+
+msgid "File name"
+msgstr "Fájlnév"
+
+msgid "Default photo caption"
+msgstr "Alapértelmezett képfelirat:"
+
+msgid "Resize site image"
+msgstr "Képméret igazítása a weboldalhoz:"
+
+msgid "Auto rotate"
+msgstr "Automatikus forgatás"
+
+msgid "Upload high (original size)"
+msgstr "HD kép feltöltés (eredeti méret):"
+
+msgid "Site image jpeg quality"
+msgstr "JPEG minőség:"
+
+msgid "Site image filter"
+msgstr "Szűrő:"
+
+msgid "Site image blur"
+msgstr "Kép elmosás:"
+
+msgid "Site image interlace"
+msgstr "Interlace:"
+
+msgid "Site thumbnail jpeg quality"
+msgstr "Bélyegkép (JPEG) minőség:"
+
+msgid "Photo selection thumbnail size"
+msgstr "Kép bélyegkép méret:"
+
+msgid "Photo selection thumbnail jpeg quality"
+msgstr "Kiválasztott kép bélyegkép (JPEG) minőség:"
+
+msgid "Use exif preview when available"
+msgstr "Exif adatok:"
+
+msgid "Custom preview ratio"
+msgstr "Saját előnézeti viszony:"
+
+msgid "Piwigo url"
+msgstr "Galéria elérési út :"
+
+msgid "Connect"
+msgstr "Csatlakozás"
+
+msgid "Work Offline"
+msgstr "Kapcsolat nélküli munka"
+
+msgid "Exit"
+msgstr "Kilépés"
+
+msgid "empty - work Offline"
+msgstr "Kapcsolat nélküli munka"
+
+msgid "None"
+msgstr "Nincs"
+
+msgid "File path and name"
+msgstr "Fájl neve és elérési útja"
+
+msgid "Prefix"
+msgstr "Előtag"
+
+msgid "Prefix + rank number"
+msgstr "Előtag + sorozatszám"
+
+msgid "Rank number + prefix"
+msgstr "Sorozatszám + előtag"
+
+msgid "Prefix + create date chrono"
+msgstr "Előtag + készítés időpontja"
+
+msgid "Create date chrono + prefix"
+msgstr "Készítés időpontja + előtag"
+
+msgid "Photo"
+msgstr "Kép"
+
+msgid "Image processing progress information"
+msgstr "Képfeldolgozás haladó információk"
+
+msgid "Cancel image processing"
+msgstr "Képfeldolgozás megszakítása"
+
+msgid "Add new album"
+msgstr "Új album létrehozása"
+
+msgid "Album name"
+msgstr "Album neve:"
+
+msgid "New album"
+msgstr "Új album"
+
+msgid "Refresh"
+msgstr "Frissítés"
+
+msgid "Expand all"
+msgstr "Összes kibontása"
+
+msgid "Collapse all"
+msgstr "Mindent bezár"
+
+msgid "Getting started"
+msgstr "Indítás"
+
+msgid "Properties"
+msgstr "Beállítások"
+
+msgid "Remove uploaded photo from selection"
+msgstr "Eltávolítás (feltöltött képek)"
+
+msgid "Activate watermark"
+msgstr "Vízjel aktiválása"
+
+msgid "Activate watermark on high definition"
+msgstr "Vízjel aktiválása nagy felbontásban"
+
+msgid "Text"
+msgstr "Szöveg"
+
+msgid "Text size"
+msgstr "Szöveg méret:"
+
+msgid "Color"
+msgstr "Szín"
+
+msgid "Position"
+msgstr "Pozició:"
+
+msgid "Top margin"
+msgstr "Felső margó:"
+
+msgid "Left margin"
+msgstr "Bal margó:"
+
+msgid "White"
+msgstr "Fehér"
+
+msgid "Black"
+msgstr "Fekete"
+
+msgid "Top"
+msgstr "Fent"
+
+msgid "Top left"
+msgstr "Balra fent"
+
+msgid "Top right"
+msgstr "Jobbra fent"
+
+msgid "Bottom"
+msgstr "Lent"
+
+msgid "Bottom left"
+msgstr "Balra lent"
+
+msgid "Bottom right"
+msgstr "Jobbra lent"
+
+msgid "Center"
+msgstr "Középen"
+
+msgid "Left"
+msgstr "Balra"
+
+msgid "Right"
+msgstr "Jobbra"
+
+msgid "my watermark"
+msgstr "vízjel"
+
+msgid "Show"
+msgstr "Mutat"
+
+msgid "All"
+msgstr "Összes"
+
+msgid "Selected"
+msgstr "Kiválasztott"
+
+msgid "Not selected"
+msgstr "Nem kiválasztott"
+
+msgid "Uploading"
+msgstr "Feltöltés"
+
+msgid "Uploading resized"
+msgstr "Átméretezett kép feltöltés"
+
+msgid "Uploading thumbnail"
+msgstr "Bélyegkép feltöltés"
+
+msgid "Uploading high definition"
+msgstr "HD kép feltöltés"
+
+msgid "Checksum for"
+msgstr "Ellenőrző összeg"
+
+msgid "Communication error with"
+msgstr "Kommunikációs hiba"
+
+msgid "Thumbnail image done for"
+msgstr "Bélyegkép kész"
+
+msgid "HD image done for"
+msgstr "HD kép kész"
+
+msgid "Resized image done for"
+msgstr "Átméretezett kép kész"
+
+msgid "Uploaded"
+msgstr "Feltöltés"
+
+msgid "Preparing resized image for"
+msgstr "Átméretezett kép készítés"
+
+msgid "Close"
+msgstr "Bezár"
+
+msgid "on"
+msgstr "be"
+
+msgid "photos added to the selection"
+msgstr "hozzáadott képek száma kiválasztásból"
+
+msgid "errors"
+msgstr "hibás"
+
+msgid "Yes, use HD resized of the original photo"
+msgstr "Igen, eredeti kép átméretezése"
+
+msgid "Yes, use a copy of the original photo"
+msgstr "Igen, másolat az eredeti képről"
+
+msgid "HD image width"
+msgstr "HD kép szélesség:"
+
+msgid "HD image height"
+msgstr "HD kép magasság:"
+
+msgid "HD image jpeg quality"
+msgstr "HD kép JPEG minőség:"
+
+msgid "HD image filter"
+msgstr "HD kép szűrő:"
+
+msgid "HD image blur"
+msgstr "HD kép elmosás:"
+
+msgid "HD image interlace"
+msgstr "HD kép interlace:"
+
+msgid "nothing"
+msgstr "semmi"
+
+msgid "replace"
+msgstr "csere"
+
+msgid "fill if empty (only replace properties currently empty in Piwigo)"
+msgstr "töltse ki ha üres (csak az üres helyekre Galéria tulajdonságoknál)"
+
+msgid "append (keep existing and add new)"
+msgstr "hozzáfűzés (jelenlegi megtartása és új készítése)"
+
+msgid "Do not ask me again"
+msgstr "Ne kérdezze meg újra"
+
+msgid "A least one photo has already been added in the past."
+msgstr "Legalább egy képet már hozzáadtak"
+
+msgid "What shall we do with files? (thumbnail, resized, high resolution)"
+msgstr "Mit csináljunk a fájlokkal? (bélyegkép, átméretezett, nagy felbontás)"
+
+msgid "What shall we do with single value properties?(caption, comment, author, create date)"
+msgstr "Mit tegyünk az egyedi jellemzőkkel? (képaláírás, megjegyzés, szerző, készítés időpontja)"
+
+msgid "What shall we do with multiple values properties? (categories, tags)"
+msgstr "Mit tegyünk az egyéb jellemzőkkel? (kategóriák, cimkék)"
+
+msgid "Photo update management"
+msgstr "Kép frissítés kezelése"
+
+msgid "Who can see the photo?"
+msgstr "Ki láthatja a képeket?"
+
+msgid "everybody"
+msgstr "mindenki"
+
+msgid "contacts"
+msgstr "kapcsolatok"
+
+msgid "friends"
+msgstr "barátok"
+
+msgid "family"
+msgstr "család"
+
+msgid "admins"
+msgstr "adminisztrátor"
+
+msgid "What shall we do with privacy level?"
+msgstr "Mit tegyünk a hozzáférési szintekkel?"
+
+msgid "Thumbnail and caption"
+msgstr "Bélyegkép és képaláírás"
+
+msgid "Property list"
+msgstr "Tulajdonságok listája"
+
+msgid "How photo selection is displayed"
+msgstr "A kiválasztott kép megjelenése"
+
+msgid "Use original"
+msgstr "Eredeti"
+
+msgid "Use resized original"
+msgstr "Átméretezett"
+
+msgid "Web sized"
+msgstr "Képek mérete a Weben"
+
+msgid "Do you want to create"
+msgstr "Létrehozzuk?"
+
+msgid "Transfer"
+msgstr "Végrehajt"
+
+msgid "Click links below to start using pLoader."
+msgstr "Itt indíthatja a pLoader programot."
+
+msgid "Add a new album."
+msgstr "Új album hozzáadása."
+
+msgid "Add photos to the selection."
+msgstr "Képek kiválasztása."
+
+msgid "Upload the photo selection into your album."
+msgstr "Album feltöltése."
+
+msgid "Photo size"
+msgstr "Kép mérete"
+
+msgid "Maximum width"
+msgstr "Maximális szélesség"
+
+msgid "Maximum height"
+msgstr "Maximális magasság"
+
+msgid "What is the destination category?"
+msgstr "Mi legyen a cél kategória?"
+
+msgid "What is the destination album?"
+msgstr "Mi legyen a cél album?"
+
+msgid "Caption"
+msgstr "Felirat"
+
+msgid "Who can see?"
+msgstr "Ki láthatja ?"
+
+msgid "You have selected a batch of %s photos"
+msgstr "Kiválasztva %s kép"
+
+msgid "Changes apply to the whole batch"
+msgstr "Kijelölt képek módosítása"
+
+msgid "Drag photos here to get started"
+msgstr "Húzza át a képeket ide a kezdéshez"
+
+msgid "Or click"
+msgstr "Vagy kattintson"
+
+msgid "to choose files on your computer"
+msgstr "válassza ki a fájlokat a számítógépről"
+
+msgid "Add photos"
+msgstr "Képek hozzáadása"
+
+msgid "Remove selected photos"
+msgstr "Kijelölt képek eltávolítása"
+
+msgid "Properties of the %s selected photos"
+msgstr "Tulajdonságok: %s (kiválasztott kép)"
+
+msgid "Tags of the %s selected photos"
+msgstr "Cimkék: %s (kiválasztott kép)"
+
+msgid "Watermark"
+msgstr "Vízjel"
+
+msgid "Tags"
+msgstr "Cimke"
+
+msgid "Search"
+msgstr "Keres"
+
+msgid "Photo exif properties"
+msgstr "Kép exif adatai"
+
Index: /extensions/pLoader/tags/1.6/locale/it_IT/pLoader.po
===================================================================
--- /extensions/pLoader/tags/1.6/locale/it_IT/pLoader.po	(revision 6108)
+++ /extensions/pLoader/tags/1.6/locale/it_IT/pLoader.po	(revision 6108)
@@ -0,0 +1,725 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Piwigo pLoader\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-12-19 11:36+0100\n"
+"PO-Revision-Date: \n"
+"Last-Translator: Karim AGREBI <rio@piwigo.org>\n"
+"Language-Team: Piwigo team <team@piwigo.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-Language: Italian\n"
+"X-Poedit-Country: ITALY\n"
+"X-Poedit-SearchPath-0: C:/strawberry/perl/site/lib/Uploader/GUI\n"
+"X-Poedit-SearchPath-1: d:/pLoader/res\n"
+
+msgid "Select photos for upload"
+msgstr "Scegliere le foto da trasferire"
+
+msgid "JPEG files"
+msgstr "File JPEG"
+
+msgid "Default author"
+msgstr "Autore di default"
+
+msgid "Photo caption  prefix"
+msgstr "Prefisso del titolo della foto"
+
+msgid "Site thumbnail size"
+msgstr "Dimensioni delle miniature"
+
+msgid "Site image width"
+msgstr "Larghezza dell'immagine"
+
+msgid "Site image height"
+msgstr "Altezza dell'immagine"
+
+msgid "Auto rotate image"
+msgstr "Rotazione automatica dell'immagine"
+
+msgid "Upload high (original size) "
+msgstr "Trasferimento alta definizione ( dimenzioni originali )"
+
+msgid "Upload high definition "
+msgstr "Trasferimento alta definizione"
+
+msgid "High definition"
+msgstr "Alta definizione"
+
+msgid "Yes"
+msgstr "Si"
+
+msgid "No"
+msgstr "No"
+
+msgid "Admin. username"
+msgstr "Login amministratore"
+
+msgid "Admin. password"
+msgstr "Password amministratore"
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Cancel"
+msgstr "Annullare"
+
+msgid "Create date"
+msgstr "Data di creazione"
+
+msgid "Width"
+msgstr "Larghezza"
+
+msgid "Height"
+msgstr "Altezza"
+
+msgid "Orientation"
+msgstr "Orientamento"
+
+msgid "Shutter speed"
+msgstr "Velocità dell'otturatore"
+
+msgid "Aperture"
+msgstr "Apertura"
+
+msgid "Focal length"
+msgstr "Lunghezza della focale"
+
+msgid "Model"
+msgstr "Modello"
+
+msgid "Lens"
+msgstr "Ottica"
+
+msgid "Author"
+msgstr "Autore"
+
+msgid "Comment"
+msgstr "Commento"
+
+msgid "Chinese"
+msgstr "Cinese"
+
+msgid "Chinese simplified"
+msgstr "Cinese semplificato"
+
+msgid "Czech"
+msgstr "Ceco"
+
+msgid "Danish"
+msgstr "Danese"
+
+msgid "English"
+msgstr "Inglese"
+
+msgid "German"
+msgstr "Tedesco"
+
+msgid "Spanish"
+msgstr "Spagnolo"
+
+msgid "French"
+msgstr "Francese"
+
+msgid "Hungarian"
+msgstr "Ungherese"
+
+msgid "Italian"
+msgstr "Italiano"
+
+msgid "Japanese"
+msgstr "Giapponese"
+
+msgid "Dutch"
+msgstr "Olandese"
+
+msgid "Polish"
+msgstr "Polacco"
+
+msgid "Portuguese Brazil"
+msgstr "Portoghese Brasile"
+
+msgid "Portuguese Portugal"
+msgstr "Portoghese Portogallo"
+
+msgid "Russian"
+msgstr "Russo"
+
+msgid "Slovak"
+msgstr "Slovacco"
+
+msgid "Brasil"
+msgstr "Brasiliano"
+
+msgid "pLoader needs to be restarted to display the new selected language"
+msgstr "pLoader deve essere rilanciato per visualizzare la nuova lingua selezzionata"
+
+msgid "Piwigo categories"
+msgstr "Categorie in Piwigo"
+
+msgid "Photo properties"
+msgstr "Proprietà della foto"
+
+msgid "Tools"
+msgstr "Strumenti"
+
+msgid "Global settings"
+msgstr "Preferenze"
+
+msgid "Advanced"
+msgstr "Advanced"
+
+msgid "Transfert chunk size"
+msgstr "Dimensione dei blocci di trasferimento"
+
+msgid "General"
+msgstr "Generale"
+
+msgid "Resized"
+msgstr "Riduzione"
+
+msgid "Thumbnail"
+msgstr "Miniature"
+
+msgid "Preview"
+msgstr "Anteprima"
+
+msgid "Photo selection"
+msgstr "Foto selezionate"
+
+msgid "Language choice"
+msgstr "Scelta della lingua"
+
+msgid "Choose a language"
+msgstr "Scegliere una lingua"
+
+msgid "Upload to Piwigo"
+msgstr "Trasferimento verso Piwigo"
+
+msgid "Remove photo from selection"
+msgstr "Togliere la foto dalla selezione"
+
+msgid "Add photo to selection"
+msgstr "Aggiungere la foto alla selezione"
+
+msgid "Not connected"
+msgstr "Non connesso"
+
+msgid "Connection to"
+msgstr "Connessione a "
+
+msgid "failed"
+msgstr "è fallito"
+
+msgid "Piwigo login"
+msgstr "Conessione a Piwigo"
+
+msgid "Piwigo login error"
+msgstr "Errore di conessione a Piwigo"
+
+msgid "Please select a valid target category"
+msgstr "Selezionare un'altra categoria"
+
+msgid "Piwigo upload error"
+msgstr "Errore di trasferimento verso Piwigo"
+
+msgid "Category name"
+msgstr "Nome della categoria"
+
+msgid "Add new category"
+msgstr "Aggiungere una nuova categoria"
+
+msgid "New category"
+msgstr "Nuova categoria"
+
+msgid "Upload cancelled"
+msgstr "Trasferimento annullata"
+
+msgid "Image upload progress information"
+msgstr "Progressione del trasferimento delle immagini"
+
+msgid "Cancel upload"
+msgstr "Annullare il trasferimento"
+
+msgid "Piwigo upload information"
+msgstr "Informazioni sul trasferimento verso Piwigo"
+
+msgid "Processing"
+msgstr "Trattamento in corso"
+
+msgid "images processed"
+msgstr "immagini trattate"
+
+msgid "images uploaded"
+msgstr "immagini trasferite"
+
+msgid "images in errors and not uploaded"
+msgstr "immagini in errore e non trasferite"
+
+msgid "Duration"
+msgstr "Durata"
+
+msgid "seconds"
+msgstr "secondi"
+
+msgid "Categories"
+msgstr "Categorie"
+
+msgid "categories"
+msgstr "categorie"
+
+msgid "Categorie"
+msgstr "Categoria"
+
+msgid "categorie"
+msgstr "categoria"
+
+msgid "Album"
+msgstr "Album"
+
+msgid "Albums"
+msgstr "Album"
+
+msgid "album"
+msgstr "album"
+
+msgid "albums"
+msgstr "album"
+
+msgid "Photo caption"
+msgstr "Titolo della foto"
+
+msgid "File name"
+msgstr "Nome del file"
+
+msgid "Default photo caption"
+msgstr "Titolo di default"
+
+msgid "Resize site image"
+msgstr "Ridurre per il sito"
+
+msgid "Auto rotate"
+msgstr "Rotazione automatica"
+
+msgid "Upload high (original size)"
+msgstr "Trasferimento della foto originale"
+
+msgid "Site image jpeg quality"
+msgstr "Qualità jpeg della foto"
+
+msgid "Site image filter"
+msgstr "Filtro di riduzione"
+
+msgid "Site image blur"
+msgstr "Accentuare/Blur"
+
+msgid "Site image interlace"
+msgstr "Interlacciato"
+
+msgid "Site thumbnail jpeg quality"
+msgstr "Qualità jpeg delle miniature del sito"
+
+msgid "Photo selection thumbnail size"
+msgstr "Dimensioni delle miniature della selezione di foto"
+
+msgid "Photo selection thumbnail jpeg quality"
+msgstr "Qualità jpeg delle miniature della selezione di foto"
+
+msgid "Use exif preview when available"
+msgstr "Usare la previsualizzazione exif"
+
+msgid "Custom preview ratio"
+msgstr "Rapporto di previsualizzazione"
+
+msgid "Piwigo url"
+msgstr "Indirizzo del sito Piwigo"
+
+msgid "Connect"
+msgstr "Connettere"
+
+msgid "Work Offline"
+msgstr "Lavorare fuori conessione"
+
+msgid "Exit"
+msgstr "Uscire"
+
+msgid "empty - work Offline"
+msgstr "niente da visualizzare - sconnesso"
+
+msgid "None"
+msgstr "Nessuno"
+
+msgid "File path and name"
+msgstr "Directory e nome file"
+
+msgid "Prefix"
+msgstr "Prefisso"
+
+msgid "Prefix + rank number"
+msgstr "Prefisso + N° d'ordine"
+
+msgid "Rank number + prefix"
+msgstr "N° d'ordine + prefisso"
+
+msgid "Prefix + create date chrono"
+msgstr "Prefisso + chrono data di creazione"
+
+msgid "Create date chrono + prefix"
+msgstr "Chrono data di creazione + prefisso"
+
+msgid "Photo"
+msgstr "Foto"
+
+msgid "Image processing progress information"
+msgstr "Progressione del trattamento delle immagini"
+
+msgid "Cancel image processing"
+msgstr "Cancellare il trattamento delle immagini"
+
+msgid "Add new album"
+msgstr "Aggiungere un nuovo album"
+
+msgid "Album name"
+msgstr "Nome dell'album"
+
+msgid "New album"
+msgstr "Nuovo album"
+
+msgid "Refresh"
+msgstr "Aggiornare"
+
+msgid "Expand all"
+msgstr "Visualizzare tutto"
+
+msgid "Collapse all"
+msgstr "Ridurre tutto"
+
+msgid "Getting started"
+msgstr "Avviare"
+
+msgid "Properties"
+msgstr "Proprietà"
+
+msgid "Remove uploaded photo from selection"
+msgstr "Svuotare la selezione delle foto dopo il trasferimento"
+
+msgid "Activate watermark"
+msgstr "Attivare watermark"
+
+msgid "Activate watermark on high definition"
+msgstr "Attivare watermark sull'alta definizione"
+
+msgid "Text"
+msgstr "Testo"
+
+msgid "Text size"
+msgstr "Dimenzioni del testo"
+
+msgid "Color"
+msgstr "Colore"
+
+msgid "Position"
+msgstr "Posizione"
+
+msgid "Top margin"
+msgstr "Margine in alto"
+
+msgid "Left margin"
+msgstr "Margine a sinistra"
+
+msgid "White"
+msgstr "Bianco"
+
+msgid "Black"
+msgstr "Nero"
+
+msgid "Top"
+msgstr "Alto"
+
+msgid "Top left"
+msgstr "Alto a sinistra"
+
+msgid "Top right"
+msgstr "Alto a destra"
+
+msgid "Bottom"
+msgstr "Basso"
+
+msgid "Bottom left"
+msgstr "Basso a sinistra"
+
+msgid "Bottom right"
+msgstr "Basso a destra"
+
+msgid "Center"
+msgstr "Centro"
+
+msgid "Left"
+msgstr "Sinistra"
+
+msgid "Right"
+msgstr "Destra"
+
+msgid "my watermark"
+msgstr "il mio watermark"
+
+msgid "Show"
+msgstr "Visualizzare"
+
+msgid "All"
+msgstr "Tutto"
+
+msgid "Selected"
+msgstr "Selezionati"
+
+msgid "Not selected"
+msgstr "Non selezionati"
+
+msgid "Uploading"
+msgstr "Trasferimento"
+
+msgid "Uploading resized"
+msgstr "Trasferimento della foto ridotta"
+
+msgid "Uploading thumbnail"
+msgstr "Trasferimento della miniatura"
+
+msgid "Uploading high definition"
+msgstr "Trasferimento della foto HD"
+
+msgid "Checksum for"
+msgstr "Checksum di"
+
+msgid "Communication error with"
+msgstr "Errore di comunicazione con"
+
+msgid "Thumbnail image done for"
+msgstr "Miniatura effettuata per"
+
+msgid "HD image done for"
+msgstr "Immagine alta definizione effettuata per"
+
+msgid "Resized image done for"
+msgstr "Immagine ridotta effettuata per "
+
+msgid "Uploaded"
+msgstr "Trasferito"
+
+msgid "Preparing resized image for"
+msgstr "Preparare la foto ridotta di"
+
+msgid "Close"
+msgstr "Chiudere"
+
+msgid "on"
+msgstr "su"
+
+msgid "photos added to the selection"
+msgstr "foto aggiunte alla selezione"
+
+msgid "errors"
+msgstr "errori"
+
+msgid "Yes, use HD resized of the original photo"
+msgstr "Si, usare una riduzzione HD della foto originale"
+
+msgid "Yes, use a copy of the original photo"
+msgstr "Si, usare una copia della foto originale"
+
+msgid "HD image width"
+msgstr "Larggezza dell'immagine HD"
+
+msgid "HD image height"
+msgstr "Altezza dell'immagine HD"
+
+msgid "HD image jpeg quality"
+msgstr "Qualità jpeg dell'immagine HD"
+
+msgid "HD image filter"
+msgstr "Filtro di riduzzione dell'immagine HD"
+
+msgid "HD image blur"
+msgstr "Accentuazione/sfuocato dell'immagine HD"
+
+msgid "HD image interlace"
+msgstr "Intreciamento dell'immagine HD"
+
+msgid "nothing"
+msgstr "non fare niente"
+
+msgid "replace"
+msgstr "rimpiazzare"
+
+msgid "fill if empty (only replace properties currently empty in Piwigo)"
+msgstr "riempire se vuoto (sostituisce solo le proprietà vuote di Piwigo)"
+
+msgid "append (keep existing and add new)"
+msgstr "append (e mantenere l'attuale e aggiungere)"
+
+msgid "Do not ask me again"
+msgstr "Ricordare la risposta"
+
+msgid "A least one photo has already been added in the past."
+msgstr "Almeno una foto è stata aggiunta in passato."
+
+msgid "What shall we do with files? (thumbnail, resized, high resolution)"
+msgstr "Cosa fare per i file? (miniatura, dimenzioni per il Web, alta definizione)"
+
+msgid "What shall we do with single value properties?(caption, comment, author, create date)"
+msgstr "Cosa fare per le proprietà semplice? (titolo, commento, autore, data di creazione)"
+
+msgid "What shall we do with multiple values properties? (categories, tags)"
+msgstr "Cosa fare per le proprietà con più valori?(categorie, tag)"
+
+msgid "Photo update management"
+msgstr "Gestione dell'aggiornamento delle foto"
+
+msgid "Who can see the photo?"
+msgstr "Chi può vedere l'immagine?"
+
+msgid "everybody"
+msgstr "tutti"
+
+msgid "contacts"
+msgstr "Contatti"
+
+msgid "friends"
+msgstr "amici"
+
+msgid "family"
+msgstr "famiglia"
+
+msgid "admins"
+msgstr "amministratori"
+
+msgid "What shall we do with privacy level?"
+msgstr "Cosa fare per il livello di privasi?"
+
+msgid "Thumbnail and caption"
+msgstr "Miniatura e il titolo"
+
+msgid "Property list"
+msgstr "Elenco delle proprietà"
+
+msgid "How photo selection is displayed"
+msgstr "Come vengono visualizzate le foto selezionate"
+
+msgid "Use original"
+msgstr "Usare l'originale"
+
+msgid "Use resized original"
+msgstr "Ridimenzionare l'originale"
+
+msgid "Web sized"
+msgstr "Foto dimenzioni web"
+
+msgid "Do you want to create"
+msgstr "Volete creare"
+
+msgid "Transfer"
+msgstr "Trasferimento"
+
+msgid "Click links below to start using pLoader."
+msgstr "Cliccare sul link per cominciare con pLoader."
+
+msgid "Add a new album."
+msgstr "Creare un nuovo album."
+
+msgid "Add photos to the selection."
+msgstr "Aggiungere delle immagini alla selezione."
+
+msgid "Upload the photo selection into your album."
+msgstr "Trasferire in un'album."
+
+msgid "Photo size"
+msgstr "Formato delle foto"
+
+msgid "Maximum width"
+msgstr "Larghezza massima"
+
+msgid "Maximum height"
+msgstr "Altezza massima"
+
+msgid "What is the destination category?"
+msgstr "Quale è la categoria di destinazione ?"
+
+msgid "What is the destination album?"
+msgstr "Quale è l'album di destinazione ?"
+
+msgid "Caption"
+msgstr "Titolo"
+
+msgid "Who can see?"
+msgstr "Qui può vedere ?"
+
+msgid "You have selected a batch of %s photos"
+msgstr "Avete selezionato %s foto"
+
+msgid "Changes apply to the whole batch"
+msgstr "Le modifiche si applicano a tutte le foto selezionate"
+
+msgid "Drag photos here to get started"
+msgstr "Depositate le foto qui per inizziare"
+
+msgid "Or click"
+msgstr "O cliccare qui"
+
+msgid "to choose files on your computer"
+msgstr "per scegliere delle foto del vostro PC"
+
+msgid "Add photos"
+msgstr "Aggiungere delle foto"
+
+msgid "Remove selected photos"
+msgstr "Ritirare le foto selezzionate"
+
+msgid "Default caption pattern"
+msgstr "Formatodi default per il titolo "
+
+msgid "Default caption"
+msgstr "titolo di default"
+
+msgid "Caption + rank number"
+msgstr "Titolo + N° d'ordinamento"
+
+msgid "Rank number + caption"
+msgstr "N° d'ordinamento + Titolo"
+
+msgid "Caption + create date chrono"
+msgstr "Titolo + Crono data di creazione"
+
+msgid "Create date chrono + caption"
+msgstr "Crono data di creazione + Titolo"
+
+msgid "Create date chrono + rank"
+msgstr "Crono data di creazione + N° d'ordinamento"
+
+msgid "Rank + create date chrono"
+msgstr "N° d'ordinamento + Crono data di creazione"
+
+msgid "Preferences"
+msgstr "Preferenze"
+
+msgid "Selection"
+msgstr "Selelzione"
+
+msgid "Your user account is not granted to upload photos"
+msgstr "Le autorizzazioni associate al vostro conto non vi permettono di trasferire delle foto"
+
+msgid "Add photos for resizing and uploading"
+msgstr "Aggiungere delle foto da ridimenzionare e trasferire"
+
+msgid "Remove selected photos. Original files are not deleted"
+msgstr "Togliere le foto selezionate. Gli originali non saranno cancellati"
+
+msgid "Change global settings"
+msgstr "Cambiare i settaggi"
+
+msgid "Rectangular"
+msgstr "Rettangolare"
+
+msgid "Square"
+msgstr "Quadrata"
+
Index: /extensions/pLoader/tags/1.6/locale/ja_JP/pLoader.po
===================================================================
--- /extensions/pLoader/tags/1.6/locale/ja_JP/pLoader.po	(revision 6108)
+++ /extensions/pLoader/tags/1.6/locale/ja_JP/pLoader.po	(revision 6108)
@@ -0,0 +1,372 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Piwigo pLoader\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-02-14 11:36+0100\n"
+"PO-Revision-Date: \n"
+"Last-Translator: Mitsuhiro Yoshida <mits@mitstek.com>\n"
+"Language-Team: Piwigo team <team@piwigo.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-SearchPath-0: C:/strawberry/perl/site/lib/Uploader/GUI\n"
+"X-Poedit-SearchPath-1: d:/pLoader/res\n"
+
+msgid "Select photos for upload"
+msgstr "アップロードする写真を選択してください。"
+
+msgid "JPEG files"
+msgstr "JPEGファイル"
+
+msgid "Default author"
+msgstr "デフォルト作者"
+
+msgid "Photo caption  prefix"
+msgstr "写真キャプション接頭辞"
+
+msgid "Site thumbnail size"
+msgstr "サイトサムネイルサイズ"
+
+msgid "Site image width"
+msgstr "サイトイメージ幅"
+
+msgid "Site image height"
+msgstr "サイトイメージ高"
+
+msgid "Auto rotate image"
+msgstr "イメージの自動回転"
+
+msgid "Upload high (original size) "
+msgstr "アップロード高 (オリジナルサイズ) "
+
+msgid "Yes"
+msgstr "Yes"
+
+msgid "No"
+msgstr "No"
+
+msgid "Admin. username"
+msgstr "管理者ユーザ名"
+
+msgid "Admin. password"
+msgstr "管理者パスワード"
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Cancel"
+msgstr "キャンセル"
+
+msgid "Create date"
+msgstr "作成日"
+
+msgid "Width"
+msgstr "幅"
+
+msgid "Height"
+msgstr "高さ"
+
+msgid "Orientation"
+msgstr "方向"
+
+msgid "Shutter speed"
+msgstr "シャッタースピード"
+
+msgid "Aperture"
+msgstr "絞り値"
+
+msgid "Focal length"
+msgstr "焦点距離"
+
+msgid "Model"
+msgstr "モデル "
+
+msgid "Lens"
+msgstr "レンズ"
+
+msgid "Author"
+msgstr "作者"
+
+msgid "Comment"
+msgstr "コメント"
+
+msgid "French"
+msgstr "フランス語"
+
+msgid "English"
+msgstr "英語"
+
+msgid "Russian"
+msgstr "ロシア語"
+
+msgid "Italian"
+msgstr "イタリア語"
+
+msgid "German"
+msgstr "ドイツ語"
+
+msgid "Spanish"
+msgstr "スペイン語"
+
+msgid "Portuguese"
+msgstr "ポルトガル語"
+
+msgid "Dutch"
+msgstr "オランダ語"
+
+msgid "Polish"
+msgstr "ポーランド語"
+
+msgid "Piwigo categories"
+msgstr "Piwigoカテゴリ"
+
+msgid "Photo properties"
+msgstr "写真プロパティ"
+
+msgid "Tools"
+msgstr "ツール"
+
+msgid "Global settings"
+msgstr "グローバル設定"
+
+msgid "General"
+msgstr "一般"
+
+msgid "Resized"
+msgstr "リサイズ"
+
+msgid "Thumbnail"
+msgstr "サムネイル"
+
+msgid "Preview"
+msgstr "プレビュー"
+
+msgid "Photo selection"
+msgstr "写真選択"
+
+msgid "Language choice"
+msgstr "言語選択"
+
+msgid "Choose a language"
+msgstr "言語を選択する"
+
+msgid "Upload to Piwigo"
+msgstr "Piwigoにアップロードする"
+
+msgid "Remove photo from selection"
+msgstr "選択より写真を削除する"
+
+msgid "Add photo to selection"
+msgstr "選択に写真を追加する"
+
+msgid "Not connected"
+msgstr "未接続"
+
+msgid "Connection to"
+msgstr "接続"
+
+msgid "failed"
+msgstr "失敗"
+
+msgid "Piwigo login"
+msgstr "Piwigoログイン"
+
+msgid "Piwigo login error"
+msgstr "Piwigoログインエラー"
+
+msgid "Please select a valid target category"
+msgstr "有効なターゲットカテゴリを選択してください。"
+
+msgid "Piwigo upload error"
+msgstr "Piwigoアップロードエラー"
+
+msgid "Category name"
+msgstr "カテゴリ名"
+
+msgid "Add new category"
+msgstr "新しいカテゴリを追加する"
+
+msgid "New category"
+msgstr "新しいカテゴリ"
+
+msgid "Upload cancelled"
+msgstr "アップロードがキャンセルされました。"
+
+msgid "Image upload progress information"
+msgstr "イメージアップロード進行情報"
+
+msgid "Cancel upload"
+msgstr "アップロードをキャンセルする"
+
+msgid "Piwigo upload information"
+msgstr "Piwigoアップロード情報"
+
+msgid "Processing"
+msgstr "処理中"
+
+msgid "images processed"
+msgstr "処理済みイメージ"
+
+msgid "images uploaded"
+msgstr "アップロード済みイメージ"
+
+msgid "images in errors and not uploaded"
+msgstr "エラーのため、イメージはアップロードされませんでした。"
+
+msgid "Duration"
+msgstr "持続期間"
+
+msgid "Categories"
+msgstr "カテゴリ"
+
+msgid "categories"
+msgstr "カテゴリ"
+
+msgid "Categorie"
+msgstr "カテゴリ"
+
+msgid "categorie"
+msgstr "カテゴリ"
+
+msgid "Album"
+msgstr "アルバム"
+
+msgid "Albums"
+msgstr "アルバム"
+
+msgid "album"
+msgstr "アルバム"
+
+msgid "albums"
+msgstr "アルバム"
+
+msgid "Photo caption"
+msgstr "写真キャプション"
+
+msgid "File name"
+msgstr "ファイル名"
+
+msgid "Default photo caption"
+msgstr "デフォルト写真キャプション"
+
+msgid "Resize site image"
+msgstr "サイトイメージをリサイズする"
+
+msgid "Auto rotate"
+msgstr "自動回転"
+
+msgid "Upload high (original size)"
+msgstr "アップロード高 (オリジナルサイズ)"
+
+msgid "Site image jpeg quality"
+msgstr "サイトイメージJPEGクオリティ"
+
+msgid "Site image filter"
+msgstr "サイトイメージフィルタ"
+
+msgid "Site image blur"
+msgstr "サイトイメージ境界 (blur)"
+
+msgid "Site image interlace"
+msgstr "サイトイメージインターレース"
+
+msgid "Site thumbnail jpeg quality"
+msgstr "サイトサムネイルJPEGクオリティ"
+
+msgid "Photo selection thumbnail size"
+msgstr "写真選択サムネイルサイズ"
+
+msgid "Photo selection thumbnail jpeg quality"
+msgstr "サイト選択サムネイルJPEGクオリティ"
+
+msgid "Use exif preview when available"
+msgstr "利用可能な場合、exifプレビューを使用する"
+
+msgid "Custom preview ratio"
+msgstr "カスタムプレビューレシオ"
+
+msgid "Piwigo url"
+msgstr "Piwigo URI"
+
+msgid "Connect"
+msgstr "接続"
+
+msgid "Work Offline"
+msgstr "オフライン作業"
+
+msgid "Exit"
+msgstr "閉じる"
+
+msgid "empty - work Offline"
+msgstr "空 - オフライン作業"
+
+msgid "None"
+msgstr "なし"
+
+msgid "File path and name"
+msgstr "ファイルパスおよび名称"
+
+msgid "Prefix"
+msgstr "接頭辞"
+
+msgid "Prefix + rank number"
+msgstr "接頭辞 + 連番"
+
+msgid "Rank number + prefix"
+msgstr "連番 + 接頭辞"
+
+msgid "Prefix + create date chrono"
+msgstr "接頭辞 + 作成日時の昇順"
+
+msgid "Create date chrono + prefix"
+msgstr "作成日時の昇順 + 接頭辞"
+
+msgid "Photo"
+msgstr "写真"
+
+msgid "Image processing progress information"
+msgstr "イメージ処理進行情報"
+
+msgid "Cancel image processing"
+msgstr "イメージ処理をキャンセルする"
+
+msgid "Add new album"
+msgstr "新しいアルバムを追加する"
+
+msgid "Album name"
+msgstr "アルバム名"
+
+msgid "New album"
+msgstr "新しいアルバム"
+
+msgid "Refresh"
+msgstr "リフレッシュ"
+
+msgid "Expand all"
+msgstr "すべてを展開する"
+
+msgid "Collapse all"
+msgstr "すべてを折りたたむ"
+
+msgid "Getting started"
+msgstr "スタートする"
+
+msgid "Properties"
+msgstr "プロパティ"
+
+msgid "Remove uploaded photo from selection"
+msgstr "アップロードされた写真を選択より削除する"
+
+msgid "Click links below to start using pLoader."
+msgstr "pLoaderを開始するには、下記のリンクをクリックしてください。"
+
+msgid "Add a new album."
+msgstr "新しいアルバムを追加します。"
+
+msgid "Add photos to the selection."
+msgstr "写真を選択に追加します。"
+
+msgid "Upload the photo selection into your album."
+msgstr "写真選択をあなたのアルバムに追加します。"
+
Index: /extensions/pLoader/tags/1.6/locale/nl_NL/pLoader.po
===================================================================
--- /extensions/pLoader/tags/1.6/locale/nl_NL/pLoader.po	(revision 6108)
+++ /extensions/pLoader/tags/1.6/locale/nl_NL/pLoader.po	(revision 6108)
@@ -0,0 +1,705 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Piwigo pLoader\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-10-10 11:36+0100\n"
+"PO-Revision-Date: \n"
+"Last-Translator: Kees Hessels <kees.hessels@hetnet.nl>\n"
+"Language-Team: Piwigo team <team@piwigo.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-SearchPath-0: C:/strawberry/perl/site/lib/Uploader/GUI\n"
+"X-Poedit-SearchPath-1: d:/pLoader/res\n"
+
+msgid "Select photos for upload"
+msgstr "Selecteer de over te zetten afbeeldingen"
+
+msgid "JPEG files"
+msgstr "JPEG-bestanden"
+
+msgid "Default author"
+msgstr "Standaard Maker"
+
+msgid "Photo caption  prefix"
+msgstr "Foto bijschrift voorvoegsel"
+
+msgid "Site thumbnail size"
+msgstr "Formaat van de mini-afbeeldingen"
+
+msgid "Site image width"
+msgstr "Breedte van de afbeeldingen"
+
+msgid "Site image height"
+msgstr "Hoogte van de afbeeldingen"
+
+msgid "Auto rotate image"
+msgstr "Afbeelding automatisch roteren"
+
+msgid "Upload high (original size) "
+msgstr "Uploaden met hoge definitie (origineel formaat)"
+
+msgid "Upload high definition "
+msgstr "Upload hoge definitie"
+
+msgid "High definition"
+msgstr "Hoge definitie"
+
+msgid "Yes"
+msgstr "Ja"
+
+msgid "No"
+msgstr "Nee"
+
+msgid "Admin. username"
+msgstr "Admin. Gebruikersnaam"
+
+msgid "Admin. password"
+msgstr "Admin. wachtwoord"
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Cancel"
+msgstr "Annuleer"
+
+msgid "Create date"
+msgstr "Aanmaakdatum"
+
+msgid "Width"
+msgstr "Breedte"
+
+msgid "Height"
+msgstr "Hoogte"
+
+msgid "Orientation"
+msgstr "Oriëntatie"
+
+msgid "Shutter speed"
+msgstr "Sluitertijd"
+
+msgid "Aperture"
+msgstr "Diafragma"
+
+msgid "Focal length"
+msgstr "Brandpuntsafstand"
+
+msgid "Model"
+msgstr "Model"
+
+msgid "Lens"
+msgstr "Lens"
+
+msgid "Author"
+msgstr "Maker"
+
+msgid "Comment"
+msgstr "Commentaar"
+
+msgid "Chinese"
+msgstr "Chinees"
+
+msgid "Chinese simplified"
+msgstr "Chinees vereenvoudigd"
+
+msgid "Czech"
+msgstr "Tsjechisch"
+
+msgid "Danish"
+msgstr "Deens"
+
+msgid "English"
+msgstr "Engels"
+
+msgid "German"
+msgstr "Duits"
+
+msgid "Spanish"
+msgstr "Spaans"
+
+msgid "French"
+msgstr "Frans"
+
+msgid "Hungarian"
+msgstr "Hongaars"
+
+msgid "Italian"
+msgstr "Italiaans"
+
+msgid "Japanese"
+msgstr "Japans"
+
+msgid "Dutch"
+msgstr "Nederlands"
+
+msgid "Polish"
+msgstr "Pools"
+
+msgid "Portuguese Brazil"
+msgstr "Portugees Brazilië"
+
+msgid "Portuguese Portugal"
+msgstr "Portugees Portugal"
+
+msgid "Russian"
+msgstr "Russisch"
+
+msgid "Slovak"
+msgstr "Slowaaks"
+
+msgid "Brasil"
+msgstr "Brasiliaans"
+
+msgid "pLoader needs to be restarted to display the new selected language"
+msgstr "pLoader moet worden herstart om de geselecteerde nieuwe taal te activeren"
+
+msgid "Piwigo categories"
+msgstr "Piwigo categorieën"
+
+msgid "Photo properties"
+msgstr "Eigenschappen van de afbeelding"
+
+msgid "Tools"
+msgstr "Gereedschap"
+
+msgid "Global settings"
+msgstr "Voorkeuren"
+
+msgid "Advanced"
+msgstr "Gevorderd"
+
+msgid "Transfert chunk size"
+msgstr "Grootte van de over te zetten bestands-blokken"
+
+msgid "General"
+msgstr "Algemeen"
+
+msgid "Resized"
+msgstr "Op juiste grootte gebracht"
+
+msgid "Thumbnail"
+msgstr "Mini-afbeelding"
+
+msgid "Preview"
+msgstr "Preview"
+
+msgid "Photo selection"
+msgstr "Geselecteerde afbeeldingen"
+
+msgid "Language choice"
+msgstr "Taal-keuze"
+
+msgid "Choose a language"
+msgstr "Kies een taal"
+
+msgid "Upload to Piwigo"
+msgstr "Zet over naar Piwigo"
+
+msgid "Remove photo from selection"
+msgstr "Verwijder afbeelding van selectie"
+
+msgid "Add photo to selection"
+msgstr "Voef afbeelding toe aan selectie"
+
+msgid "Not connected"
+msgstr "Niet verbonden"
+
+msgid "Connection to"
+msgstr "Verbinding met"
+
+msgid "failed"
+msgstr "mislukt"
+
+msgid "Piwigo login"
+msgstr "aanmelding bij Piwigo"
+
+msgid "Piwigo login error"
+msgstr "Aanmeldings-fout Piwigo"
+
+msgid "Please select a valid target category"
+msgstr "Aub een bestaande categorie selecteren"
+
+msgid "Piwigo upload error"
+msgstr "Upload-fout naar Piwigo"
+
+msgid "Category name"
+msgstr "Categorienaam"
+
+msgid "Add new category"
+msgstr "Nieuwe categirie toevoegen"
+
+msgid "New category"
+msgstr "Nieuwe categorie"
+
+msgid "Upload cancelled"
+msgstr "Upload geannuleerd"
+
+msgid "Image upload progress information"
+msgstr "Informatie over de voortgang van het overzetten van de afbeelding"
+
+msgid "Cancel upload"
+msgstr "Annuleer upload"
+
+msgid "Piwigo upload information"
+msgstr "Piwigo upload informatie"
+
+msgid "Processing"
+msgstr "Verwerking"
+
+msgid "images processed"
+msgstr "verwerkte afbeeldingen"
+
+msgid "images uploaded"
+msgstr "afbeeldingen ge-upload"
+
+msgid "images in errors and not uploaded"
+msgstr "afmeeldingen met fouten en niet ge-upload"
+
+msgid "Duration"
+msgstr "Duur"
+
+msgid "seconds"
+msgstr "seconden"
+
+msgid "Categories"
+msgstr "Categorieën"
+
+msgid "categories"
+msgstr "categorieën"
+
+msgid "Categorie"
+msgstr "Categorie"
+
+msgid "categorie"
+msgstr "categorie"
+
+msgid "Album"
+msgstr "Album"
+
+msgid "Albums"
+msgstr "Albums"
+
+msgid "album"
+msgstr "album"
+
+msgid "albums"
+msgstr "albums"
+
+msgid "Photo caption"
+msgstr "Afbeeldings-bijschrift"
+
+msgid "File name"
+msgstr "Bestandsnaam"
+
+msgid "Default photo caption"
+msgstr "Standaard afbeeldings-bijschrift"
+
+msgid "Resize site image"
+msgstr "Maak afbeelding passend"
+
+msgid "Auto rotate"
+msgstr "Automatische rotatie"
+
+msgid "Upload high (original size)"
+msgstr "Uploaden met hoge definitie (origineel formaat)"
+
+msgid "Site image jpeg quality"
+msgstr "Jpeg-kwaliteit van de afbeelding"
+
+msgid "Site image filter"
+msgstr "Afbeeldings-filter"
+
+msgid "Site image blur"
+msgstr "Afbeeldings-vervaging (blur)"
+
+msgid "Site image interlace"
+msgstr "Afbeeldings-interlace"
+
+msgid "Site thumbnail jpeg quality"
+msgstr "Jpeg-kwaliteit van de mini-afbeeldingen"
+
+msgid "Photo selection thumbnail size"
+msgstr "Grootte van de mini-afbeelding"
+
+msgid "Photo selection thumbnail jpeg quality"
+msgstr "Jpeg-kwaliteit van de mini-afbeelding"
+
+msgid "Use exif preview when available"
+msgstr "Gebruik exif preview wanneer beschikbaar"
+
+msgid "Custom preview ratio"
+msgstr "Aangepaste preview-verhouding"
+
+msgid "Piwigo url"
+msgstr "Piwigo URL"
+
+msgid "Connect"
+msgstr "Verbinden"
+
+msgid "Work Offline"
+msgstr "Offline werken"
+
+msgid "Exit"
+msgstr "Exit"
+
+msgid "empty - work Offline"
+msgstr "leeg - werk offline"
+
+msgid "None"
+msgstr "Geen"
+
+msgid "File path and name"
+msgstr "Pad en bestandsnaam"
+
+msgid "Prefix"
+msgstr "Voorvoegsel (prefix)"
+
+msgid "Prefix + rank number"
+msgstr "Voorvoegsel (prefix) + rangnummer"
+
+msgid "Rank number + prefix"
+msgstr "Rangnummer + voorvoegsel (prefix)"
+
+msgid "Prefix + create date chrono"
+msgstr "Voorvoegsel"
+
+msgid "Create date chrono + prefix"
+msgstr "Aanmaakdatum chronologisch + voorvoegsel (prefix)"
+
+msgid "Photo"
+msgstr "Afbeelding"
+
+msgid "Image processing progress information"
+msgstr "Informatie over de voortgang van de verwerking van de afbeeldingen"
+
+msgid "Cancel image processing"
+msgstr "Annuleer de verwerking van de afbeeldingen"
+
+msgid "Add new album"
+msgstr "Een nieuw album toevoegen"
+
+msgid "Album name"
+msgstr "Naam van het album"
+
+msgid "New album"
+msgstr "Nieuw album"
+
+msgid "Refresh"
+msgstr "Verversen"
+
+msgid "Expand all"
+msgstr "Alles uitklappen"
+
+msgid "Collapse all"
+msgstr "Alles inklappen"
+
+msgid "Getting started"
+msgstr "aan de slag"
+
+msgid "Properties"
+msgstr "Eigenschappen"
+
+msgid "Remove uploaded photo from selection"
+msgstr "Verwijder de ge-uploade afbeeldingen van de selectie"
+
+msgid "Activate watermark"
+msgstr "Activeer watermerk"
+
+msgid "Activate watermark on high definition"
+msgstr "Activeer watermerk met hoge definitie"
+
+msgid "Text"
+msgstr "Tekst"
+
+msgid "Text size"
+msgstr "Tekstgrootte"
+
+msgid "Color"
+msgstr "Kleur"
+
+msgid "Position"
+msgstr "Positie"
+
+msgid "Top margin"
+msgstr "Marge boven"
+
+msgid "Left margin"
+msgstr "Marge links"
+
+msgid "White"
+msgstr "Wit"
+
+msgid "Black"
+msgstr "Zwart"
+
+msgid "Top"
+msgstr "Boven"
+
+msgid "Top left"
+msgstr "Boven links"
+
+msgid "Top right"
+msgstr "Boven rechts"
+
+msgid "Bottom"
+msgstr "Onder"
+
+msgid "Bottom left"
+msgstr "Onder links"
+
+msgid "Bottom right"
+msgstr "Onder rechts"
+
+msgid "Center"
+msgstr "Midden"
+
+msgid "Left"
+msgstr "Links"
+
+msgid "Right"
+msgstr "Rechts"
+
+msgid "my watermark"
+msgstr "Mijn watermerk"
+
+msgid "Show"
+msgstr "Laat zien"
+
+msgid "All"
+msgstr "Alles"
+
+msgid "Selected"
+msgstr "Geselecteerd"
+
+msgid "Not selected"
+msgstr "Niet geselecteerd"
+
+msgid "Uploading"
+msgstr "Bezig met upload"
+
+msgid "Uploading resized"
+msgstr "Bezig met upload van aangepaste afbeelding"
+
+msgid "Uploading thumbnail"
+msgstr "Bezig met upload van hoge defintie mini-afbeelding"
+
+msgid "Uploading high definition"
+msgstr "Bezig met upload van hoge defintie afbeelding"
+
+msgid "Checksum for"
+msgstr "Controlecijfer (Checksum) voor"
+
+msgid "Communication error with"
+msgstr "Communicatiefout met"
+
+msgid "Thumbnail image done for"
+msgstr "Mini-afbeelding gemaakt voor"
+
+msgid "HD image done for"
+msgstr "Hoge definitie afbeelding gemaakt voor"
+
+msgid "Resized image done for"
+msgstr "Aangepaste afbeelding gemaakt voor"
+
+msgid "Uploaded"
+msgstr "Ge-upload"
+
+msgid "Preparing resized image for"
+msgstr "Bezig met aanmaken aagepaste afbeelding"
+
+msgid "Close"
+msgstr "Sluit"
+
+msgid "on"
+msgstr "op"
+
+msgid "photos added to the selection"
+msgstr "afbeeldingen toegevoegd aan de selectie"
+
+msgid "errors"
+msgstr "fouten"
+
+msgid "Yes, use HD resized of the original photo"
+msgstr "Ja, gebruik een HD aangepaste afbeelding van het origineel"
+
+msgid "Yes, use a copy of the original photo"
+msgstr "Oui, une copie de la photo originale"
+
+msgid "HD image width"
+msgstr "HD-afbeelding breedte"
+
+msgid "HD image height"
+msgstr "HD-afbeelding hoogte"
+
+msgid "HD image jpeg quality"
+msgstr "HD-afbeelding jpeg-kwaliteit"
+
+msgid "HD image filter"
+msgstr "HD-afbeelding filter"
+
+msgid "HD image blur"
+msgstr "HD-afbeelding vervaging (blur)"
+
+msgid "HD image interlace"
+msgstr "HD-afbeelding interlace"
+
+msgid "nothing"
+msgstr "niets"
+
+msgid "replace"
+msgstr "vervangen"
+
+msgid "fill if empty (only replace properties currently empty in Piwigo)"
+msgstr "vullen indien leeg (vervang alleen de momenteel in Piwigo niet ingevulde eigenschappen)"
+
+msgid "append (keep existing and add new)"
+msgstr "voeg toe (bewaar bestaande en voeg nieuwe toe)"
+
+msgid "Do not ask me again"
+msgstr "Niet meer vragen"
+
+msgid "A least one photo has already been added in the past."
+msgstr "In het verleden is er minstens een foto toegevoegd."
+
+msgid "What shall we do with files? (thumbnail, resized, high resolution)"
+msgstr "Wat doen we met de bestanden? (mini-afbeelding, aangepaste, hoge resolutie)"
+
+msgid "What shall we do with single value properties?(caption, comment, author, create date)"
+msgstr "Wat doen we met de enkele waarde eigenschappen? (bijschrijft, commentaar, maker, aanmaakdatum)"
+
+msgid "What shall we do with multiple values properties? (categories, tags)"
+msgstr "Wat doen we met de enkele waarde eigenschappen? (categorieen, tags)"
+
+msgid "Photo update management"
+msgstr "Afbeeldingen update management"
+
+msgid "Who can see the photo?"
+msgstr "Wie mag deze afbeeldingen zien?"
+
+msgid "everybody"
+msgstr "iedereen"
+
+msgid "contacts"
+msgstr "contacten"
+
+msgid "friends"
+msgstr "vrienden"
+
+msgid "family"
+msgstr "familie"
+
+msgid "admins"
+msgstr "administrateurs"
+
+msgid "What shall we do with privacy level?"
+msgstr "Wat doen we met het privacy-nivo?"
+
+msgid "Thumbnail and caption"
+msgstr "Mini-afbeelding en bijschrift"
+
+msgid "Property list"
+msgstr "Eigenschappenlijst"
+
+msgid "How photo selection is displayed"
+msgstr "Hoe de selectie van afbeelding moet worden weergegeven"
+
+msgid "Use original"
+msgstr "Gebruik het origineel"
+
+msgid "Use resized original"
+msgstr "Gebruik het aangepaste origineel"
+
+msgid "Web sized"
+msgstr "web sized"
+
+msgid "Do you want to create"
+msgstr "Wilt u aanmaken"
+
+msgid "Transfer"
+msgstr "Overzetten"
+
+msgid "Click links below to start using pLoader."
+msgstr "Klik op de links hieronder om pLoader te starten."
+
+msgid "Add a new album."
+msgstr "Maak een nieuw album aan."
+
+msgid "Add photos to the selection."
+msgstr "Voeg afbeeldingen toe aan de selectie."
+
+msgid "Upload the photo selection into your album."
+msgstr "Upload de geselecteerde afbeeldingen naar je album."
+
+msgid "Photo size"
+msgstr "Grootte van de afbeelding"
+
+msgid "Maximum width"
+msgstr "Maximum breedte"
+
+msgid "Maximum height"
+msgstr "Maximale hoogte"
+
+msgid "What is the destination category?"
+msgstr "Wat is de bestemmingscategorie ?"
+
+msgid "What is the destination album?"
+msgstr "Wat is het bestemmingsalbum?"
+
+msgid "Caption"
+msgstr "Bijschrift"
+
+msgid "Who can see?"
+msgstr "Wie mag de afbeelding zien?"
+
+msgid "You have selected a batch of %s photos"
+msgstr "U heeft %s afbeeldingen geselecteerd"
+
+msgid "Changes apply to the whole batch"
+msgstr "De aanpassingen worden op alle geselecteerde afbeeldingen toegepast"
+
+msgid "Drag photos here to get started"
+msgstr "Sleep afbeeldingen hier naar toe om te beginnen"
+
+msgid "Or click"
+msgstr "Of klik"
+
+msgid "to choose files on your computer"
+msgstr "om afbeeldingen op uw computer te selecteren"
+
+msgid "Add photos"
+msgstr "Voeg afbeeldingen toe"
+
+msgid "Remove selected photos"
+msgstr "Verwijder geselecteerde afbeeldingen"
+
+msgid "Default caption pattern"
+msgstr "Standaard bijschrift-patroon"
+
+msgid "Default caption"
+msgstr "Standaard bijschrift"
+
+msgid "Caption + rank number"
+msgstr "Bijschrift + rangnummer"
+
+msgid "Rank number + caption"
+msgstr "Rangnummer + bijschrift"
+
+msgid "Caption + create date chrono"
+msgstr "Bijschrift + chronologische aanmaakdatum"
+
+msgid "Create date chrono + caption"
+msgstr "Chronologische aanmaakdatum + bijschrift"
+
+msgid "Create date chrono + rank"
+msgstr "Chronologische aanmaakdatum + rangnummer"
+
+msgid "Rank + create date chrono"
+msgstr "Rangnummer + Chronologische aanmaakdatum"
+
+msgid "Preferences"
+msgstr "Voorkeuren"
+
+msgid "Selection"
+msgstr "Selectie"
+
Index: /extensions/pLoader/tags/1.6/locale/ru_RU/pLoader.po
===================================================================
--- /extensions/pLoader/tags/1.6/locale/ru_RU/pLoader.po	(revision 6108)
+++ /extensions/pLoader/tags/1.6/locale/ru_RU/pLoader.po	(revision 6108)
@@ -0,0 +1,629 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Piwigo pLoader\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-10-10 11:36+0100\n"
+"PO-Revision-Date: \n"
+"Last-Translator: ddtddt <ddtddt@piwigo.org>\n"
+"Language-Team: Piwigo team <team@piwigo.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-SearchPath-0: C:/strawberry/perl/site/lib/Uploader/GUI\n"
+"X-Poedit-SearchPath-1: d:/pLoader/res\n"
+
+msgid "Select photos for upload"
+msgstr "Выберите фото для upload"
+
+msgid "JPEG files"
+msgstr "Архивы JPEG"
+
+msgid "Default author"
+msgstr "Автор значения по умолчанию"
+
+msgid "Photo caption  prefix"
+msgstr "Приставка титра фото"
+
+msgid "Site thumbnail size"
+msgstr "Размер thumbnail места"
+
+msgid "Site image width"
+msgstr "Ширина изображения места"
+
+msgid "Site image height"
+msgstr "Высота изображения места"
+
+msgid "Auto rotate image"
+msgstr "Автомобиль поворачивает изображение"
+
+msgid "Upload high (original size) "
+msgstr "Upload высокий (первоначально размер)"
+
+msgid "Upload high definition "
+msgstr "Определение Upload высокое"
+
+msgid "High definition"
+msgstr "Высокое определение"
+
+msgid "Yes"
+msgstr "Да"
+
+msgid "No"
+msgstr "Нет"
+
+msgid "Admin. username"
+msgstr "Логин администратора"
+
+msgid "Admin. password"
+msgstr "Пароль администратора"
+
+msgid "OK"
+msgstr "О'КЕЙ"
+
+msgid "Cancel"
+msgstr "Отмена"
+
+msgid "Create date"
+msgstr "Создайте дату"
+
+msgid "Width"
+msgstr "Ширина"
+
+msgid "Height"
+msgstr "Высота"
+
+msgid "Orientation"
+msgstr "Ориентация"
+
+msgid "Shutter speed"
+msgstr "Выдержка затвора"
+
+msgid "Aperture"
+msgstr "Апертура"
+
+msgid "Focal length"
+msgstr "Фокусное расстояниое"
+
+msgid "Model"
+msgstr "Модель"
+
+msgid "Lens"
+msgstr "Объектив"
+
+msgid "Author"
+msgstr "Автор"
+
+msgid "Comment"
+msgstr "Комментарий"
+
+msgid "Chinese"
+msgstr "Китайско"
+
+msgid "Chinese simplified"
+msgstr "Упрощенный китаец"
+
+msgid "Czech"
+msgstr "Чехословакско"
+
+msgid "Danish"
+msgstr "Дансько"
+
+msgid "English"
+msgstr "Английско"
+
+msgid "German"
+msgstr "Немецко"
+
+msgid "Spanish"
+msgstr "Испанско"
+
+msgid "French"
+msgstr "Французско"
+
+msgid "Hungarian"
+msgstr "Венгерско"
+
+msgid "Italian"
+msgstr "Итальянско"
+
+msgid "Japanese"
+msgstr "Японско"
+
+msgid "Dutch"
+msgstr "Голландско"
+
+msgid "Polish"
+msgstr "Польский"
+
+msgid "Portuguese Brazil"
+msgstr "Португалка Бразилия"
+
+msgid "Portuguese Portugal"
+msgstr "Португалка Португалия"
+
+msgid "Russian"
+msgstr "Русско"
+
+msgid "Slovak"
+msgstr "Словацкий"
+
+msgid "Brasil"
+msgstr "Бразилия"
+
+msgid "pLoader needs to be restarted to display the new selected language"
+msgstr "pLoader нужно быть повторенным старт для показа нового выбранного языка"
+
+msgid "Piwigo categories"
+msgstr "Категории Piwigo"
+
+msgid "Photo properties"
+msgstr "Свойства фото"
+
+msgid "Tools"
+msgstr "Инструменты"
+
+msgid "Global settings"
+msgstr "Глобальные установки"
+
+msgid "Advanced"
+msgstr "Предварительно"
+
+msgid "Transfert chunk size"
+msgstr "Размер ломтя Transfert"
+
+msgid "General"
+msgstr "Дженерал"
+
+msgid "Resized"
+msgstr "Изменено размеры"
+
+msgid "Thumbnail"
+msgstr "Миниатюра"
+
+msgid "Preview"
+msgstr "Preview"
+
+msgid "Photo selection"
+msgstr "Выбор фото"
+
+msgid "Language choice"
+msgstr "Выбор языка"
+
+msgid "Choose a language"
+msgstr "Выберите язык"
+
+msgid "Upload to Piwigo"
+msgstr "Отправить в Piwigo"
+
+msgid "Remove photo from selection"
+msgstr "Извлекайте фото от выбора"
+
+msgid "Add photo to selection"
+msgstr "Добавьте фото к выбору"
+
+msgid "Not connected"
+msgstr "Не соединено"
+
+msgid "Connection to"
+msgstr "Соединение к"
+
+msgid "failed"
+msgstr "неудачно"
+
+msgid "Piwigo login"
+msgstr "Имя пользователя Piwigo"
+
+msgid "Piwigo login error"
+msgstr "Ошибка имени пользователя Piwigo"
+
+msgid "Please select a valid target category"
+msgstr "Пожалуйста выберите действительную категорию цели"
+
+msgid "Piwigo upload error"
+msgstr "Ошибка upload Piwigo"
+
+msgid "Category name"
+msgstr "Имя категории"
+
+msgid "Add new category"
+msgstr "Добавьте новую категорию"
+
+msgid "New category"
+msgstr "Новая категория"
+
+msgid "Upload cancelled"
+msgstr "Отмененный Upload"
+
+msgid "Image upload progress information"
+msgstr "Данные по прогресса upload изображения"
+
+msgid "Cancel upload"
+msgstr "Отмените upload"
+
+msgid "Piwigo upload information"
+msgstr "Данные по upload Piwigo"
+
+msgid "Processing"
+msgstr "Обрабатывать"
+
+msgid "images processed"
+msgstr "обрабатываемые изображения"
+
+msgid "images uploaded"
+msgstr "загруженные изображения"
+
+msgid "images in errors and not uploaded"
+msgstr "не загруженные изображения в ошибках и"
+
+msgid "Duration"
+msgstr "Продолжительность"
+
+msgid "seconds"
+msgstr "секунды"
+
+msgid "Categories"
+msgstr "Категории"
+
+msgid "categories"
+msgstr "категории"
+
+msgid "Categorie"
+msgstr "Категории"
+
+msgid "categorie"
+msgstr "категории"
+
+msgid "Album"
+msgstr "Альбом"
+
+msgid "Albums"
+msgstr "Альбомы"
+
+msgid "album"
+msgstr "альбом"
+
+msgid "albums"
+msgstr "альбомы"
+
+msgid "Photo caption"
+msgstr "Титр фото"
+
+msgid "File name"
+msgstr "Имя файла"
+
+msgid "Default photo caption"
+msgstr "Титр фото значения по умолчанию"
+
+msgid "Resize site image"
+msgstr "Измените размеры изображение места"
+
+msgid "Auto rotate"
+msgstr "Автомобиль вращает"
+
+msgid "Upload high (original size)"
+msgstr "Upload высокий (первоначально размер)"
+
+msgid "Site image jpeg quality"
+msgstr "Качество JPEG изображения места"
+
+msgid "Site image filter"
+msgstr "Фильтр изображения места"
+
+msgid "Site image blur"
+msgstr "Нерезкость изображения места"
+
+msgid "Site image interlace"
+msgstr "Изображение места переплетает"
+
+msgid "Site thumbnail jpeg quality"
+msgstr "Сайт миниатюры Качество JPEG"
+
+msgid "Photo selection thumbnail size"
+msgstr "Фото Выбор размера миниатюры"
+
+msgid "Photo selection thumbnail jpeg quality"
+msgstr "Фото выборе эскиза Качество JPEG"
+
+msgid "Use exif preview when available"
+msgstr "Использования EXIF просмотра, когда доступно"
+
+msgid "Custom preview ratio"
+msgstr "Изготовленный на заказ коэффициент предваротельного просмотра"
+
+msgid "Piwigo url"
+msgstr "URL Piwigo"
+
+msgid "Connect"
+msgstr "Соединитесь"
+
+msgid "Work Offline"
+msgstr "Работа Offline"
+
+msgid "Exit"
+msgstr "Выход"
+
+msgid "empty - work Offline"
+msgstr "пусто - работа Offline"
+
+msgid "None"
+msgstr "Никакие"
+
+msgid "File path and name"
+msgstr "Путь и имя архива"
+
+msgid "Prefix"
+msgstr "Приставка"
+
+msgid "Prefix + rank number"
+msgstr "Префикс + номер рейтинга"
+
+msgid "Rank number + prefix"
+msgstr "Номер рейтинга + префикса"
+
+msgid "Prefix + create date chrono"
+msgstr "Префикс + новизне Chrono"
+
+msgid "Create date chrono + prefix"
+msgstr "Дата создания Chrono + префикса"
+
+msgid "Photo"
+msgstr "Фото"
+
+msgid "Image processing progress information"
+msgstr "магу информация о ходе обработки"
+
+msgid "Cancel image processing"
+msgstr "Отмена обработки изображений"
+
+msgid "Add new album"
+msgstr "Добавить новый альбом"
+
+msgid "Album name"
+msgstr "Имя альбома"
+
+msgid "New album"
+msgstr "Новый альбом"
+
+msgid "Refresh"
+msgstr "Освежите"
+
+msgid "Expand all"
+msgstr "Расширьте все"
+
+msgid "Collapse all"
+msgstr "Рушатся все"
+
+msgid "Getting started"
+msgstr "Получать начато"
+
+msgid "Properties"
+msgstr "Свойства"
+
+msgid "Remove uploaded photo from selection"
+msgstr "Remove загрузил фото от выбора"
+
+msgid "Activate watermark"
+msgstr "Активируйте водяной знак"
+
+msgid "Activate watermark on high definition"
+msgstr "Активируйте водяной знак на высоком определении"
+
+msgid "Text"
+msgstr "Текст"
+
+msgid "Text size"
+msgstr "Размер текста"
+
+msgid "Color"
+msgstr "Цвет"
+
+msgid "Position"
+msgstr "Положение"
+
+msgid "Top margin"
+msgstr "Верхний допустимый предел"
+
+msgid "Left margin"
+msgstr "Левый допустимый предел"
+
+msgid "White"
+msgstr "Бело"
+
+msgid "Black"
+msgstr "Чернота"
+
+msgid "Top"
+msgstr "Вверху"
+
+msgid "Top left"
+msgstr "Вверху слева"
+
+msgid "Top right"
+msgstr "Вверху справа"
+
+msgid "Bottom"
+msgstr "Внизу"
+
+msgid "Bottom left"
+msgstr "Внизу слева"
+
+msgid "Bottom right"
+msgstr "Внизу справа"
+
+msgid "Center"
+msgstr "Центр"
+
+msgid "Left"
+msgstr "Левый"
+
+msgid "Right"
+msgstr "Правый"
+
+msgid "my watermark"
+msgstr "мой водяной знак"
+
+msgid "Show"
+msgstr "Выставка"
+
+msgid "All"
+msgstr "Все"
+
+msgid "Selected"
+msgstr "Выбрано"
+
+msgid "Not selected"
+msgstr "Не выбрано"
+
+msgid "Uploading"
+msgstr "Загружать"
+
+msgid "Uploading resized"
+msgstr "Измененный размеры загружать"
+
+msgid "Uploading thumbnail"
+msgstr "Загружаю миниатюрами"
+
+msgid "Uploading high definition"
+msgstr "Загружаю высокой четкости"
+
+msgid "Checksum for"
+msgstr "Контрольная сумма"
+
+msgid "Communication error with"
+msgstr "Ошибка связи с"
+
+msgid "Thumbnail image done for"
+msgstr "Миниатюрное изображение сделано для"
+
+msgid "HD image done for"
+msgstr "четкое изображение сделано для"
+
+msgid "Resized image done for"
+msgstr "Уменьшить изображение сделано для"
+
+msgid "Uploaded"
+msgstr "Загружено"
+
+msgid "Preparing resized image for"
+msgstr "Подготовка для изменения размеров изображений"
+
+msgid "Close"
+msgstr "Закрыть"
+
+msgid "on"
+msgstr "на"
+
+msgid "photos added to the selection"
+msgstr "Фотографии, добавленные к выбору"
+
+msgid "errors"
+msgstr "Ошибки"
+
+msgid "Yes, use HD resized of the original photo"
+msgstr "Да, использовать HD изменении размера исходной фотографии"
+
+msgid "Yes, use a copy of the original photo"
+msgstr "Да, использовать копии оригинальных фото"
+
+msgid "HD image width"
+msgstr "Ширина изображения высокого определения"
+
+msgid "HD image height"
+msgstr "Высота изображения высокого определения"
+
+msgid "HD image jpeg quality"
+msgstr "четкое изображение JPEG качество"
+
+msgid "HD image filter"
+msgstr "Фильтр изображения высокого определения"
+
+msgid "HD image blur"
+msgstr "четкое изображение Blur"
+
+msgid "HD image interlace"
+msgstr "чересстрочной развертки изображения высокого определения"
+
+msgid "nothing"
+msgstr "ничего"
+
+msgid "replace"
+msgstr "заменить"
+
+msgid "fill if empty (only replace properties currently empty in Piwigo)"
+msgstr "Заполните, если пусто (только заменить свойств в настоящее время пуст Piwigo)"
+
+msgid "append (keep existing and add new)"
+msgstr "приложите (держите существовать и добавляйте новую) o)"
+
+msgid "Do not ask me again"
+msgstr "Не спрашивайте мне снова"
+
+msgid "A least one photo has already been added in the past."
+msgstr "Наименьшее одно фото уже было добавлено в прошлом."
+
+msgid "What shall we do with files? (thumbnail, resized, high resolution)"
+msgstr "Чего мы сделать с архивами? (разрешение thumbnail, измененного размеры, высокого)"
+
+msgid "What shall we do with single value properties?(caption, comment, author, create date)"
+msgstr "Чего мы сделать с одиночными свойствами значения? (титр, комментарий, автор, создает дату)"
+
+msgid "What shall we do with multiple values properties? (categories, tags)"
+msgstr "Чего мы сделать с свойствами значений многократной цепи? (категории, бирки)"
+
+msgid "Photo update management"
+msgstr "Управление новой версии фото"
+
+msgid "Who can see the photo?"
+msgstr "Кто может увидеть фото?"
+
+msgid "everybody"
+msgstr "каждое"
+
+msgid "contacts"
+msgstr "контакты"
+
+msgid "friends"
+msgstr "друзья"
+
+msgid "family"
+msgstr "семья"
+
+msgid "admins"
+msgstr "Администраторам"
+
+msgid "What shall we do with privacy level?"
+msgstr "Что мы будем делать в личную уровне?"
+
+msgid "Thumbnail and caption"
+msgstr "Миниатюра и подпись"
+
+msgid "Property list"
+msgstr "Все объекты"
+
+msgid "How photo selection is displayed"
+msgstr "Способ отображения фото отбор"
+
+msgid "Use original"
+msgstr "Используйте оригинал"
+
+msgid "Use resized original"
+msgstr "Используйте измененный размеры оригинал"
+
+msgid "Web sized"
+msgstr "Определенная размер паутина"
+
+msgid "Do you want to create"
+msgstr "Вы хотите создаться"
+
+msgid "Click links below to start using pLoader."
+msgstr "Соединения щелчка ниже, котор нужно начать использовать pLoader."
+
+msgid "Add a new album."
+msgstr "Добавьте новый альбом."
+
+msgid "Add photos to the selection."
+msgstr "Добавьте фото к выбору."
+
+msgid "Upload the photo selection into your album."
+msgstr "Загрузите выбор фото в ваш альбом."
Index: /extensions/pLoader/tags/1.6/locale/zh_CN/pLoader.po
===================================================================
--- /extensions/pLoader/tags/1.6/locale/zh_CN/pLoader.po	(revision 6108)
+++ /extensions/pLoader/tags/1.6/locale/zh_CN/pLoader.po	(revision 6108)
@@ -0,0 +1,372 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Piwigo pLoader\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-10-10 11:36+0100\n"
+"PO-Revision-Date: \n"
+"Last-Translator: ron osman <ron@piwigo.com>\n"
+"Language-Team: Piwigo team <team@piwigo.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-SearchPath-0: C:/strawberry/perl/site/lib/Uploader/GUI\n"
+"X-Poedit-SearchPath-1: d:/pLoader/res\n"
+
+msgid "Select photos for upload"
+msgstr "选择要上传的相片"
+
+msgid "JPEG files"
+msgstr "JPEG 文件"
+
+msgid "Default author"
+msgstr "默认作者："
+
+msgid "Photo caption  prefix"
+msgstr "相片标题前缀："
+
+msgid "Site thumbnail size"
+msgstr "网站缩略图尺寸："
+
+msgid "Site image width"
+msgstr "网站图片宽度："
+
+msgid "Site image height"
+msgstr "网站图片高度："
+
+msgid "Auto rotate image"
+msgstr "自动旋转图片："
+
+msgid "Upload high (original size) "
+msgstr "上传高度 ( 原始尺寸 )"
+
+msgid "Yes"
+msgstr "是的"
+
+msgid "No"
+msgstr "不是"
+
+msgid "Admin. username"
+msgstr "管理员，用户名："
+
+msgid "Admin. password"
+msgstr "管理员，密码："
+
+msgid "OK"
+msgstr "确定"
+
+msgid "Cancel"
+msgstr "取消"
+
+msgid "Create date"
+msgstr "创建日期："
+
+msgid "Width"
+msgstr "宽度："
+
+msgid "Height"
+msgstr "高度："
+
+msgid "Orientation"
+msgstr "方向："
+
+msgid "Shutter speed"
+msgstr "快门："
+
+msgid "Aperture"
+msgstr "光圈："
+
+msgid "Focal length"
+msgstr "焦距："
+
+msgid "Model"
+msgstr "模特儿："
+
+msgid "Lens"
+msgstr "镜头："
+
+msgid "Author"
+msgstr "作者："
+
+msgid "Comment"
+msgstr "评论："
+
+msgid "French"
+msgstr "法国"
+
+msgid "English"
+msgstr "英国"
+
+msgid "Russian"
+msgstr "俄罗斯"
+
+msgid "Italian"
+msgstr "意大利"
+
+msgid "German"
+msgstr "德国"
+
+msgid "Spanish"
+msgstr "西班牙"
+
+msgid "Portuguese"
+msgstr "葡萄牙"
+
+msgid "Dutch"
+msgstr "荷兰"
+
+msgid "Polish"
+msgstr "波兰"
+
+msgid "Piwigo categories"
+msgstr "Piwigo 类别"
+
+msgid "Photo properties"
+msgstr "相片属性"
+
+msgid "Tools"
+msgstr "工具"
+
+msgid "Global settings"
+msgstr "全局设置"
+
+msgid "General"
+msgstr "一般"
+
+msgid "Resized"
+msgstr "改变尺寸"
+
+msgid "Thumbnail"
+msgstr "缩略图"
+
+msgid "Preview"
+msgstr "预览"
+
+msgid "Photo selection"
+msgstr "选择的相片"
+
+msgid "Language choice"
+msgstr "语言选择"
+
+msgid "Choose a language"
+msgstr "选择一个语言"
+
+msgid "Upload to Piwigo"
+msgstr "上传到 Piwigo"
+
+msgid "Remove photo from selection"
+msgstr "移除选择区里的相片"
+
+msgid "Add photo to selection"
+msgstr "添加相片到选择区"
+
+msgid "Not connected"
+msgstr "没有连接上"
+
+msgid "Connection to"
+msgstr "连接到"
+
+msgid "failed"
+msgstr "失败"
+
+msgid "Piwigo login"
+msgstr "登录 Piwigo"
+
+msgid "Piwigo login error"
+msgstr "Piwigo 登录错误"
+
+msgid "Please select a valid target category"
+msgstr "请选择一个有效的目标目录"
+
+msgid "Piwigo upload error"
+msgstr "Piwigo 上传错误"
+
+msgid "Category name"
+msgstr "类别名称："
+
+msgid "Add new category"
+msgstr "添加新类别"
+
+msgid "New category"
+msgstr "新类别"
+
+msgid "Upload cancelled"
+msgstr "上传已被取消"
+
+msgid "Image upload progress information"
+msgstr "图片上传进度"
+
+msgid "Cancel upload"
+msgstr "取消上传"
+
+msgid "Piwigo upload information"
+msgstr "Piwigo 上传情况"
+
+msgid "Processing"
+msgstr "正在处理"
+
+msgid "images processed"
+msgstr "图片已被处理"
+
+msgid "images uploaded"
+msgstr "图片已上传"
+
+msgid "images in errors and not uploaded"
+msgstr "图片上传出错，上传失败"
+
+msgid "Duration"
+msgstr "期间"
+
+msgid "Categories"
+msgstr "类别"
+
+msgid "categories"
+msgstr "类别"
+
+msgid "Categorie"
+msgstr "类别"
+
+msgid "categorie"
+msgstr "类别"
+
+msgid "Album"
+msgstr "相册"
+
+msgid "Albums"
+msgstr "相册"
+
+msgid "album"
+msgstr "相册"
+
+msgid "albums"
+msgstr "相册"
+
+msgid "Photo caption"
+msgstr "相片标题："
+
+msgid "File name"
+msgstr "文件名："
+
+msgid "Default photo caption"
+msgstr "默认相片标题："
+
+msgid "Resize site image"
+msgstr "调整网站图片大小："
+
+msgid "Auto rotate"
+msgstr "自动旋转："
+
+msgid "Upload high (original size)"
+msgstr "上传高度（原始尺寸）"
+
+msgid "Site image jpeg quality"
+msgstr "网站 jpeg 图片质量："
+
+msgid "Site image filter"
+msgstr "网站图片过滤："
+
+msgid "Site image blur"
+msgstr "网站图片模糊："
+
+msgid "Site image interlace"
+msgstr "网站图片交错："
+
+msgid "Site thumbnail jpeg quality"
+msgstr "网站 jpeg 文件的质量:"
+
+msgid "Photo selection thumbnail size"
+msgstr "图片选择区的缩略图尺寸:"
+
+msgid "Photo selection thumbnail jpeg quality"
+msgstr "图片选择区的 jpeg 缩略图质量:"
+
+msgid "Use exif preview when available"
+msgstr "当 Exif 信息可用时，即显示出来："
+
+msgid "Custom preview ratio"
+msgstr "自定义预览旋转比率:"
+
+msgid "Piwigo url"
+msgstr "Piwigo 网址"
+
+msgid "Connect"
+msgstr "连接"
+
+msgid "Work Offline"
+msgstr "离线操作"
+
+msgid "Exit"
+msgstr "退出"
+
+msgid "empty - work Offline"
+msgstr "空 - 离线操作"
+
+msgid "None"
+msgstr "没有"
+
+msgid "File path and name"
+msgstr "文件路径和名称"
+
+msgid "Prefix"
+msgstr "前缀"
+
+msgid "Prefix + rank number"
+msgstr "前缀 + 等级数"
+
+msgid "Rank number + prefix"
+msgstr "等级数 + 前缀"
+
+msgid "Prefix + create date chrono"
+msgstr "前缀 + 创建日期"
+
+msgid "Create date chrono + prefix"
+msgstr "创建日期 + 前缀"
+
+msgid "Photo"
+msgstr "相片"
+
+msgid "Image processing progress information"
+msgstr "图片处理进度信息"
+
+msgid "Cancel image processing"
+msgstr "取消图片处理"
+
+msgid "Add new album"
+msgstr "添加新相册"
+
+msgid "Album name"
+msgstr "相册名称:"
+
+msgid "New album"
+msgstr "新相册"
+
+
+msgid "Refresh"
+msgstr "刷新"
+
+msgid "Expand all"
+msgstr "展开所有"
+
+msgid "Collapse all"
+msgstr "收缩所有"
+
+msgid "Getting started"
+msgstr "入门指南"
+
+msgid "Properties"
+msgstr "属性"
+
+msgid "Remove uploaded photo from selection"
+msgstr "移除选择区里已上传的相片:"
+
+msgid "Click links below to start using pLoader."
+msgstr "点击以下链接开始使用 pLoader."
+
+msgid "Add a new album."
+msgstr "添加新相册。"
+
+msgid "Add photos to the selection."
+msgstr "添加相片到选择区域。"
+
+msgid "Upload the photo selection into your album."
+msgstr "上传选择区域的相片到您的相册。"
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/DlgCommon.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/DlgCommon.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/DlgCommon.pm	(revision 6108)
@@ -0,0 +1,426 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+package Uploader::GUI::DlgCommon;
+use strict;
+use Wx qw/wxDP_ALLOWNONE wxDefaultPosition wxDefaultSize/;
+use Wx::Calendar;
+use Wx::Locale qw/:default/;
+use Data::Dumper;
+use base qw/
+               Class::Accessor::Fast
+           /; 
+
+__PACKAGE__->mk_accessors(     
+    qw/
+        properties
+        frame_callback
+      /
+);
+
+sub InitHandler {
+    my ( $self ) = @_;
+
+    # to connect the right event handler to each control
+    my $ctrl_handlers = {
+        'Wx::TextCtrl' => sub { my ( $ctrl ) = @_; Wx::Event::EVT_TEXT( $ctrl, $ctrl, sub { $self->OnTextCtrl(@_) } ); },
+        'Wx::Choice'   => sub { my ( $ctrl ) = @_; Wx::Event::EVT_CHOICE( $ctrl, $ctrl, sub { $self->OnChoice(@_) } ); },
+        'Wx::RadioBox' => sub { my ( $ctrl ) = @_; Wx::Event::EVT_RADIOBOX( $ctrl, $ctrl, sub { $self->OnRadioBox(@_) } ); },
+        'Wx::CheckBox' => sub { my ( $ctrl ) = @_; Wx::Event::EVT_CHECKBOX( $ctrl, $ctrl, sub { $self->OnCheckBox(@_) } ); },
+        'Wx::SpinCtrl' => sub { my ( $ctrl ) = @_; Wx::Event::EVT_SPINCTRL( $ctrl, $ctrl, sub { $self->OnSpinCtrl(@_) } ); },
+        'Wx::ComboBox' => sub { my ( $ctrl ) = @_;
+                              Wx::Event::EVT_COMBOBOX( $ctrl, $ctrl, sub { $self->OnComboBox(@_) } );
+                              Wx::Event::EVT_TEXT( $ctrl, $ctrl, sub { $self->OnComboBoxText(@_) } );
+                          },
+        'Wx::DatePickerCtrl' => sub { my ( $ctrl ) = @_; Wx::Event::EVT_DATE_CHANGED( $ctrl, $ctrl, sub { $self->OnDatePicker(@_) } ); },
+        'Uploader::GUI::wxCategoryTreeCtrl' => sub { my ( $ctrl ) = @_;
+                                                   Wx::Event::EVT_TREE_SEL_CHANGED(
+                                                       $ctrl,
+                                                       $ctrl,
+                                                       sub { 
+                                                           $self->OnCategoryTreeSelChanged(@_); 
+                                                       }
+                                                   );
+                                               },
+    };
+    
+    map {
+        my $ctrl =$self->FindWindow($_);
+
+        if(defined $ctrl){
+            $ctrl_handlers->{ ref $ctrl}->($ctrl) if exists $ctrl_handlers->{ ref $ctrl};
+
+            $ctrl->SetValidator(
+                $self->properties->{$_}->{validator}
+            ) if exists $self->properties->{$_}->{validator};
+        }
+    }
+    keys %{$self->properties};
+    
+
+}
+
+# what does happen when the text changes
+sub OnCheckBox {
+    my ( $self, $ctrl, $event ) = @_;
+    
+    my $id = $ctrl->GetId;
+    # change the property value
+    $self->properties->{$id}->{value}->(
+        $event->IsChecked
+    ) if exists $self->properties->{$id}->{value};
+
+    # exec the callback
+    $self->properties->{$id}->{frame_callback}->($self, $ctrl, $event) if exists
+        $self->properties->{$id}->{frame_callback};    
+
+    $event->Skip;
+}
+
+# what does happen when selection changes
+
+
+sub OnComboBoxText {
+    my ( $self, $ctrl, $event ) = @_;
+
+    # text changed by user, not selection
+    if( $ctrl->GetValue ne $ctrl->GetStringSelection){
+       my $id = $ctrl->GetId;
+        # change the property value
+        $self->properties->{$id}->{value}->(
+            $ctrl->GetValue
+        ) if exists $self->properties->{$id}->{value};
+
+        # exec the callback
+        $self->properties->{$id}->{frame_callback}->($self, $ctrl, $event) if exists
+            $self->properties->{$id}->{frame_callback};    
+    }
+
+}
+
+
+sub OnComboBox {
+    my ( $self, $ctrl, $event ) = @_;
+     
+    my $id = $ctrl->GetId;
+
+    $ctrl->{_multi_selection_mode} = $self->properties->{$id}->{multi_selection_mode}->()
+        if exists $self->properties->{$id}->{multi_selection_mode};
+
+    my $selection = exists $self->properties->{$id}->{string_selection} ? $ctrl->GetValue : $ctrl->GetSelection;
+
+    my $value = $self->properties->{$id}->{pre_process}->( $selection ) if exists
+        $self->properties->{$id}->{pre_process};    
+
+    if( exists $self->properties->{$id}->{value} ){
+        $value = $self->properties->{$id}->{value}->(
+            $value,
+            $selection,
+        );
+        # the item selected in the list is not the real value
+        # we place here the actual value
+        # to use in EVT_IDLE event, and overwrite the text field with it
+        $ctrl->{_value} = $value;
+    }
+
+    # exec the callback
+    $self->properties->{$id}->{frame_callback}->($self, $ctrl, $event) if exists
+        $self->properties->{$id}->{frame_callback};    
+}
+
+
+# what does happen when the text changes
+sub OnTextCtrl {
+    my ( $self, $ctrl, $event ) = @_;
+    
+    my $id = $ctrl->GetId;
+    # change the property value
+    $self->properties->{$id}->{value}->(
+        $event->GetString
+    ) if exists $self->properties->{$id}->{value};
+
+    # exec the callback
+    $self->properties->{$id}->{frame_callback}->($self, $ctrl, $event) if exists
+        $self->properties->{$id}->{frame_callback};    
+    
+}
+
+sub OnSpinCtrl {
+    my ( $self, $ctrl, $event ) = @_;
+    
+    my $id = $ctrl->GetId;
+    # change the property value
+    $self->properties->{$id}->{value}->(
+        $event->GetInt
+    ) if exists $self->properties->{$id}->{value};
+
+    # exec the callback
+    $self->properties->{$id}->{frame_callback}->($self, $ctrl, $event) if exists
+        $self->properties->{$id}->{frame_callback};    
+    
+    $event->Skip;
+}
+
+sub OnRadioBox {
+    my ( $self, $ctrl, $event ) = @_;
+    
+    my $id = $ctrl->GetId;
+
+    # if a preprocess value is required
+    my $value = $event->GetSelection;
+    $value = $self->properties->{$id}->{pre_process}->( $value ) if exists
+        $self->properties->{$id}->{pre_process};    
+    # change the property value. use the index selection
+    $self->properties->{$id}->{selection}->(
+        $value
+    ) if exists $self->properties->{$id}->{selection};
+
+    # exec the callback
+    $self->properties->{$id}->{frame_callback}->($self, $ctrl, $event) if exists
+        $self->properties->{$id}->{frame_callback};    
+    
+    $event->Skip;
+
+}
+
+sub OnChoice {
+    my ( $self, $ctrl, $event ) = @_;
+    
+    my $id = $ctrl->GetId;
+
+    # if a preprocess value is required
+    my $value = exists $self->properties->{$id}->{string_selection} ? $event->GetString : $event->GetSelection;
+    $value = $self->properties->{$id}->{pre_process}->( $value ) if exists
+        $self->properties->{$id}->{pre_process};    
+    # change the property value. use the index selection
+    $self->properties->{$id}->{selection}->(
+        $value
+    ) if exists $self->properties->{$id}->{selection};
+
+    # change the property value. use the string
+    $self->properties->{$id}->{string_selection}->(
+        $value
+    ) if exists $self->properties->{$id}->{string_selection};
+
+    # exec the callback
+    $self->properties->{$id}->{frame_callback}->($self, $ctrl, $event) if exists
+        $self->properties->{$id}->{frame_callback};    
+    
+    $event->Skip;
+}
+
+
+sub OnDatePicker {
+    my ( $self, $ctrl, $event ) = @_;
+    
+    my $id = $ctrl->GetId;
+
+    # change the property value
+    $self->properties->{$id}->{value}->(
+        $event->GetDate->FormatISODate
+    ) if exists $self->properties->{$id}->{value};
+    # exec the callback
+    $self->properties->{$id}->{frame_callback}->($self, $ctrl, $event) if exists
+        $self->properties->{$id}->{frame_callback};    
+    
+    $event->Skip;
+}
+
+
+my $change_value = {
+    'Wx::SpinCtrl' => sub { my ($ctrl, $value ) = @_; $ctrl->SetValue($value)},
+    'Wx::TextCtrl' => sub { my ($ctrl, $value ) = @_; $ctrl->ChangeValue($value)},
+    'Wx::CheckBox' => sub { my ($ctrl, $value ) = @_; $ctrl->SetValue($value)},
+    'Wx::DatePickerCtrl' => sub { my ($ctrl, $value ) = @_;
+                                  my $date = Wx::DateTime->new;    
+                                  my ($yyyy, $mm, $dd, $hh, $mi, $ss ) = split(/[:\/\\\-\.\s]/, $value);
+                                  $date->ParseDate(
+                                    sprintf("%s/%s/%s", $yyyy, $mm, $dd)
+                                  );
+                                  if(-1 eq $value){
+                                      $date->SetToCurrent;
+                                  }
+                                  $ctrl->SetValue($date);
+                            },
+    'Wx::ComboBox' => sub { 
+                          my ($ctrl, $value ) = @_; 
+                          $ctrl->SetValue($value) ; 
+                      },
+};
+
+
+sub OnCategoryTreeSelChanged {
+    my ( $self, $ctrl, $event ) = @_;
+
+    my $id = $ctrl->GetId;
+
+    # change the property value.
+    $self->properties->{$id}->{id_selection}->(
+        $event->GetEventObject->GetSelectionsIds
+    ) if exists $self->properties->{$id}->{id_selection};
+
+    #printf("OnCategoryTreeSelChanged %s\n", Dumper $self->properties->{$id}->{id_selection}->());
+
+    # exec the callback
+    $self->properties->{$id}->{frame_callback}->($self, $ctrl, $event) if exists
+        $self->properties->{$id}->{frame_callback};    
+    
+    $event->Skip;
+}
+
+
+my $clear_value = {
+    'Wx::TextCtrl' => sub { my ($ctrl) = @_; $ctrl->Clear},
+    'Wx::CheckBox' => sub { my ($ctrl) = @_; $ctrl->SetValue(0)},
+    'Wx::DatePickerCtrl' => sub { my ($ctrl) = @_; $ctrl->SetValue(Wx::DateTime->new->SetToCurrent)},
+    'Uploader::GUI::wxCategoryTreeCtrl' => sub { my ( $ctrl ) = @_;
+                                               $ctrl->SelectItem($ctrl->GetRootItem);
+                                           },
+};    
+
+sub SetProperties {
+    my ( $self ) = @_;
+    
+    map {
+        my $ctrl =$self->FindWindow($_);
+        if(defined $ctrl){
+            #printf("%s\n", $ctrl);
+            # checkbox, static text
+            $change_value->{ref $ctrl}->(
+                $ctrl,
+                $self->properties->{$_}->{value}->()
+            ) if exists $self->properties->{$_}->{value};
+            # only works for control with items
+            $ctrl->SetSelection(
+                $self->properties->{$_}->{selection}->()
+            ) if exists $self->properties->{$_}->{selection};
+
+            $ctrl->SetStringSelection(
+                gettext(
+                    $self->properties->{$_}->{string_selection}->()
+                )
+            ) if exists $self->properties->{$_}->{string_selection};
+        }
+    }
+    keys %{$self->properties};
+}
+
+sub InitLabels {
+    my ( $self ) = @_;
+    
+    map {
+        my $ctrl =$self->FindWindow($_)||$self->{$_};
+        #printf("ctrl %s : %s\n", $_, $ctrl);        
+        if(defined $ctrl){
+            # checkbox, static text
+            $ctrl->SetLabel(
+               $self->properties->{$_}->{label}
+            ) if exists $self->properties->{$_}->{label};
+
+            $ctrl->GetStaticBox->SetLabel(
+                $self->properties->{$_}->{staticbox_label}
+            ) if exists $self->properties->{$_}->{staticbox_label};
+
+            # radiobox
+            my $labels =$self->properties->{$_}->{labels};
+            $labels||=[];
+            for(my $i=0; $i < scalar @$labels ; $i++){
+                $ctrl->SetItemLabel($i, $labels->[$i]);
+            }
+
+            # notebook pages
+            my $texts =$self->properties->{$_}->{texts};
+            $texts||=[];
+            for(my $i=0; $i < scalar @$texts ; $i++){
+                $ctrl->SetPageText($i, $texts->[$i]);
+            }
+
+        }
+    }
+    keys %{$self->properties};
+
+}
+
+sub InitChoices {
+    my ( $self ) = @_;
+
+    map {
+        my $ctrl =$self->FindWindow($_);
+        #printf("ctrl %s : %s\n", $_, $ctrl);        
+        if(defined $ctrl){
+            # choice
+            my $choices =$self->properties->{$_}->{choices};
+            $choices||=[];
+            map{
+                $ctrl->Append($_);
+            }@$choices;
+        }
+    }
+    keys %{$self->properties};
+
+}
+
+sub GetProperties {
+    my ( $self ) = @_;
+
+    map {
+        my $ctrl = $self->FindWindow($_);
+        #printf("ctrl %s : %s\n", $_, $ctrl);        
+        if(defined $ctrl){
+        # checkbox, static text
+            $self->properties->{$_}->{value}->(
+                $ctrl->GetValue()
+            ) if exists $self->properties->{$_}->{value};
+
+            $self->properties->{$_}->{selection}->(
+                $ctrl->GetSelection()            
+            ) if exists $self->properties->{$_}->{selection};
+
+            $self->properties->{$_}->{string_selection}->(
+                $ctrl->GetStringSelection()            
+            ) if exists $self->properties->{$_}->{string_selection};
+        }
+    }
+    keys %{$self->properties};
+}
+
+sub ClearProperties {
+    my ( $self ) = @_;
+    
+    map {
+        my $ctrl =$self->FindWindow($_);
+        if(defined $ctrl){
+             # checkbox, static text
+            $clear_value->{ref $ctrl}->(
+                $ctrl
+            ) if exists  $clear_value->{ref $ctrl};
+            # only works for control with items
+            $ctrl->SetSelection(
+                -1            
+            ) if exists $self->properties->{$_}->{selection};
+        }
+
+            $ctrl->SetStringSelection(
+                -1            
+            ) if exists $self->properties->{$_}->{string_selection};
+    }
+    keys %{$self->properties};
+
+}
+1;
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/Frame.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/Frame.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/Frame.pm	(revision 6108)
@@ -0,0 +1,2014 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+package Uploader::GUI::Frame;
+use strict;
+use Data::Dumper;
+use Carp;
+use Wx;
+use Wx::DND;
+use Wx qw/
+             wxCLIP_CHILDREN
+             wxYES_NO
+             wxYES
+             wxICON_QUESTION
+             wxITEM_NORMAL
+             wxID_OK
+             wxDEFAULT_FRAME_STYLE
+             wxVERTICAL
+             wxGROW
+             wxSHAPED
+             wxBITMAP_TYPE_JPEG
+             wxBITMAP_TYPE_GIF
+             wxBITMAP_TYPE_PNG
+             wxBITMAP_TYPE_ANY
+             wxTB_FLAT
+             wxTB_TEXT
+             wxSIZE
+             wxWHITE
+             wxBLACK
+             wxID_CANCEL
+             wxFD_OPEN
+             wxFD_MULTIPLE
+             wxALL
+             wxGROW
+             wxDefaultPosition
+             wxDefaultSize
+             wxTheApp
+             wxIMAGE_LIST_NORMAL
+             wxNO_BORDER
+             wxTE_MULTILINE
+             wxTE_READONLY
+             wxITEM_NORMAL 
+             wxBORDER_NONE
+             wxNullBitmap 
+             wxTR_MULTIPLE
+             wxTR_EXTENDED
+             wxTR_HIDE_ROOT
+             wxTR_HAS_BUTTONS
+             wxTR_EDIT_LABELS
+             wxMAXIMIZE
+             wxOK
+             wxICON_EXCLAMATION
+             wxICON_INFORMATION
+             WXK_DELETE
+             wxHORIZONTAL
+             wxVERTICAL
+             wxEXPAND
+             wxSWISS
+             wxNORMAL
+             wxBOLD
+             wxALIGN_CENTER
+         /;
+use base qw/Wx::Frame Class::Accessor::Fast/;
+use File::Spec;
+use Wx::Locale qw/:default/;
+use POSIX qw(ceil floor);
+
+require Win32 if($^O =~ /MSWin32/);
+
+
+
+my @properties = 
+    qw/
+          progressdlg
+          upload_progressdlg
+          imageviewer
+          imageviewer_img
+          tree
+          tree_root
+          treeimglist
+          tree_item_default
+          pwg
+          logwnd
+          oldlogwnd
+          categories
+          imagelist
+          image_preview_dlg
+          image_prop_piwigo
+          exif_dlg
+          image_prop_tags
+          global_settings_dlg
+          piwigo_property_list
+          exif_properties
+          global_settings
+          toolbar
+          branding
+          current_imageviewer_index
+          imageviewer_mnu
+          tree_mnu
+          imageviewer_select_multi
+          frameLayout
+          piwigo_tags
+          image_tags
+          piwigo_photo_properties
+          piwigo_photo_properties_dlg
+          piwigo_photo_properties_tags
+          image_preview_need_refresh
+          imageviewer_refresh
+          imageviewer_item_refresh
+          horizontal_splitter
+          destination_category_dlg
+          destination_categories
+          categories_treectrl
+      /;
+__PACKAGE__->mk_accessors( @properties );
+
+use Wx::Perl::TextValidator;
+use Uploader::GUI::wxImageListCtrl;
+use Uploader::GUI::wxPropertyListDlg;
+use Uploader::GUI::wxGlobalSettings;
+use Uploader::GUI::wxImagePreview;
+use Uploader::GUI::wxPhotoProperties;
+use Uploader::GUI::wxImageReuploadDlg;
+use Uploader::GUI::wxImageProcessingProgressDlg;
+use Uploader::GUI::wxDestinationCategoryDlg;
+use Uploader::GUI::wxCategoryTreeCtrl;
+use utf8;
+$|=1;
+
+my $ID_TREE_CTX_MENU = 20000 ;
+my $ID_IMAGEVIEWER_CTX_MENU = 20100 ;
+
+
+sub new {
+    my( $class, $params ) = @_;
+
+    my $self  = $class->SUPER::new( 
+        undef, 
+        -1, 
+        $params->{title},
+        wxDefaultPosition,
+        wxDefaultSize, 
+        wxDEFAULT_FRAME_STYLE
+    );
+
+
+    $self->pwg( $params->{pwg} );
+    $self->imagelist( $params->{imagelist} );
+
+
+    $self->imagelist->pwg(
+        $self->pwg
+    );
+
+    $self->imagelist->categories(
+        []
+    );
+
+
+    $self->init_gui_callbacks;
+    $self->init_properties_dlg_bindings;
+    $self->init_frame;
+    $self->init_menus;
+    $self->init_event_handlers;
+    $self->init_image_types;   
+
+    $self->imageviewer->SelectItem(
+        $self->current_imageviewer_index
+    ) if $self->imageviewer->GetItemCount;
+   
+    # if file in command line parameters, try to load
+    my $files = wxTheApp->argv;
+    $self->SetNewFiles($files) if scalar @$files;
+
+    $self->Show;
+    $self;
+}
+
+
+sub init_gui_callbacks {
+    my ( $self ) = @_;
+
+    # callback for GUI refresh : add thumbnail images to the imageviewer control
+    $self->imagelist->SetNewFilesViewerRefreshCallback(
+        sub { $self->SetNewFilesViewerRefresh(@_) }
+    );
+
+    # callback for GUI refresh : progress dialog display of thumbnail image being created
+    $self->imagelist->SetNewFilesProgressCallback(
+        sub { $self->SetNewFilesProgress(@_) }
+    );
+
+    $self->imagelist->SetNewFilesDisplayEndInfoCallback(
+        sub { $self->SetNewFilesDisplayEndInfo(@_) }
+    );
+
+    # callback for GUI refresh : remove thumbnail images from imageviewer control
+    $self->imagelist->UploadImagesViewerCallback(
+        sub { $self->UploadImagesViewerRefresh(@_) }
+    );
+    
+    $self->imagelist->ReuploadCallback(
+    sub 
+    {
+        Uploader::GUI::wxImageReuploadDlg->new(
+        { 
+            title => gettext("Photo update management"),
+            properties => 
+            {
+                $main::ID_REUPLOAD_ACTION_FILES => 
+                {
+                    selection=>sub {$self->imagelist->reupload_action_files(@_)},
+                    label=>gettext("What shall we do with files? (thumbnail, resized, high resolution)"),
+                    labels=>[
+                        gettext("nothing"),
+                        gettext("replace"),
+                    ],
+                },
+                $main::ID_REUPLOAD_ACTION_PROPERTIES => 
+                { 
+                    selection=>sub{$self->imagelist->reupload_action_properties(@_)},
+                    label=>gettext("What shall we do with single value properties?(caption, comment, author, create date)"),
+                    labels=>[
+                        gettext("nothing"),
+                        gettext("fill if empty (only replace properties currently empty in Piwigo)"),
+                        gettext("replace"),
+                    ],
+                },
+                $main::ID_REUPLOAD_ACTION_PROPERTIES_M =>
+                { 
+                    selection=>sub{$self->imagelist->reupload_action_properties_m(@_)},
+                    label=>gettext("What shall we do with multiple values properties? (categories, tags)"),
+                    labels=>[
+                        gettext("nothing"),
+                        gettext("append (keep existing and add new)"),
+                        gettext("replace"),
+                    ],
+                },
+                $main::ID_REUPLOAD_NOT_ASK => 
+                { 
+                    value=>sub{$self->imagelist->reupload_not_ask(@_)}, 
+                    label=>gettext("Do not ask me again"),
+                },
+                $main::ID_REUPLOAD_TEXT => 
+                { 
+                    label=>gettext("A least one photo has already been added in the past."),
+                },
+            },
+        } )->ShowModal();}
+    );
+
+
+    # callback for GUI refresh : progress dialog display current uploaded image
+    $self->imagelist->progress_thumbnail_refresh(
+        sub { $self->UploadProgressThumbnailRefresh(@_) }
+    );
+
+    $self->imagelist->progress_msg_refresh(
+        sub { $self->UploadProgressMessageRefresh(@_) }
+    );
+
+    $self->imagelist->progress_msg_details_refresh(
+        sub { $self->UploadProgressMessageDetailsRefresh(@_) }
+    );
+
+    $self->imagelist->progressbar_refresh(
+        sub { $self->UploadProgressBarRefresh(@_) }
+    );
+    
+    $self->imagelist->progress_endinfo_refresh(
+        sub { $self->UploadDisplayEndInfo(@_) }
+    );
+}
+
+
+sub init_properties_dlg_bindings {
+    my ( $self ) = @_;
+
+    $self->piwigo_photo_properties(
+        {
+            $main::CAPTION => { label=>gettext("Caption")},
+            $main::PHOTO_PROPERTIES_CAPTION => {
+                multi_selection_mode => sub { $self->multi_selection_mode },
+                string_selection => sub { return 1; },
+                value => sub {
+                    $self->imagelist->SetImageSelectionName(@_);
+                    $self->multi_selection_mode ?
+                    $self->imagelist->image_selection_name :
+                    $self->imagelist->current_image->site_name;
+                },
+                pre_process => sub { sub { $self->imagelist->GetCurrentImageCaption(@_); } },
+                choices =>
+                [
+                    map { gettext $_ } @{wxTheApp->caption_patterns}
+                ],
+                frame_callback => sub { $self->imageviewer_item_refresh(1); },
+            },
+            $main::COMMENT => { label=>gettext("Comment")},
+            $main::PHOTO_PROPERTIES_COMMENT => {
+                value => sub { 
+                    $self->multi_selection_mode ?
+                    $self->imagelist->SetImageSelectionComment(@_):
+                    $self->imagelist->current_image->site_comment(@_) 
+                },
+                frame_callback => sub { $self->imageviewer_item_refresh(1); },
+            },
+            $main::AUTHOR => { label=>gettext("Author")},
+            $main::PHOTO_PROPERTIES_AUTHOR => { 
+                value => sub { 
+                    $self->multi_selection_mode ?
+                    $self->imagelist->SetImageSelectionAuthor(@_):
+                    $self->imagelist->current_image->site_author(@_) 
+                },
+                frame_callback => sub { $self->imageviewer_item_refresh(1); },
+            },
+            $main::TAGS => { label=>gettext("Tags")},
+            $main::CREATE_DATE => { label=>gettext("Create date")},
+            $main::PHOTO_PROPERTIES_CREATE_DATE => { 
+                value => sub { 
+                    $self->multi_selection_mode ?
+                    $self->imagelist->SetImageSelectionCreateDate(@_):
+                    $self->imagelist->current_image->create_date(@_) 
+                },
+                frame_callback => sub { $self->imageviewer_item_refresh(1); },
+            },
+            $main::PRIVACY_LEVEL => { label=>gettext("Who can see?")},
+            $main::PHOTO_PROPERTIES_PRIVACY_LEVEL => {
+                selection => sub {
+                    $self->multi_selection_mode ? 
+                    $self->imagelist->SetImageSelectionPrivacyLevel(@_):
+                    $self->imagelist->current_image->privacy_level(@_)
+                },
+                choices => wxTheApp->privacy_level_choices,
+            },
+            $main::PHOTO_PROPERTIES_NB => {
+                texts => [
+                    gettext("Properties"),
+                    gettext("Tags")
+                ], 
+            },
+            $main::PHOTO_PROPERTIES_UPLOAD => { label=>gettext("Upload to Piwigo") },
+        }
+    );    
+
+    $self->global_settings(
+        {
+            $main::DEFAULT_PHOTO_CAPTION => { label => gettext("Default caption pattern") },
+            $main::CPANE_RESIZE_ADVANCED => { label => gettext("Advanced") },
+            $main::CPANE_HD_ADVANCED => { label => gettext("Advanced") },
+            $main::CPANE_TRANSFERT_ADVANCED => { label => gettext("Advanced") },
+            $main::GS_THUMBNAIL => { label => gettext("Thumbnail") },
+            $main::GS_SITE_IMG => { label => gettext("Web sized") },
+            $main::GS_HD => { label => gettext("High definition") },
+            $main::GS_CLOSE => { label => gettext("Close")},
+            $main::GS_THUMBNAIL_SHAPE => {
+                selection => sub { $self->imagelist->thumbnail_shape_square(@_) },
+                choices =>
+                [
+                    map { gettext $_ } ( "Rectangular", "Square" ) 
+                ],
+            },
+            $main::GS_DEFAULT_PHOTO_CAPTION => {
+                string_selection => sub { $self->imagelist->default_caption_pattern(@_) },
+                choices =>
+                [
+                    map { gettext $_ } @{wxTheApp->caption_patterns}
+                ],
+                pre_process => sub { my ( $value ) = @_; wxTheApp->eng_caption_patterns->{$value} },
+                frame_callback => sub { 
+                    my( $self, $ctrl, $event ) = @_; 
+                    $self->OnDefaultPhotoCaption($event);
+                },
+            },
+            $main::PHOTO_CAPTION_PREFIX => { label => gettext("Default caption") },
+            $main::GS_PHOTO_CAPTION_PREFIX => {
+                value => sub { $self->imagelist->default_caption(@_) },
+            },
+            $main::GS_AUTO_ROTATE => {
+                label => gettext("Auto rotate image"),
+                value => sub { $self->imagelist->auto_rotate(@_) }
+           },
+            $main::DEFAULT_AUTHOR => { label => gettext("Default author")},
+            $main::GS_DEFAULT_AUTHOR => { value => sub { $self->imagelist->author(@_) } },
+            $main::THUMBNAIL_SIZE => { label => gettext("Site thumbnail size") },
+            $main::GS_THUMBNAIL_SIZE => {
+                value => sub { $self->imagelist->thumb_size(@_) },
+                validator => Wx::Perl::TextValidator->new( '\d' ) 
+            },
+            $main::THUMBNAIL_JPEG_QUALITY => { label => gettext("Site thumbnail jpeg quality") },
+            $main::GS_THUMBNAIL_JPEG_QUALITY => {
+                value => sub { $self->imagelist->th_quality(@_) },
+                validator => Wx::Perl::TextValidator->new( '\d' ) 
+            },
+            $main::GS_CREATE_RESIZED => {
+                selection => sub { $self->imagelist->create_resized(@_) },
+                choices =>
+                [
+                    map { gettext $_ } ( "Use original", "Use resized original" ) 
+                ],
+                frame_callback => sub { 
+                    my( $dlg, $ctrl, $event ) = @_;
+                    $dlg->OnCreateResized($event);
+                },
+            },
+            $main::SITE_IMG_WIDTH => { label => gettext("Maximum width") },
+            $main::GS_SITE_IMG_WIDTH => {
+                value => sub { $self->imagelist->resize_w(@_) },
+                validator => Wx::Perl::TextValidator->new( '\d' ) 
+            },
+            $main::SITE_IMG_HEIGHT => { label => gettext("Maximum height") },
+            $main::GS_SITE_IMG_HEIGHT => {
+                value => sub { $self->imagelist->resize_h(@_) },
+                validator => Wx::Perl::TextValidator->new( '\d' ) 
+            },
+            $main::SITE_IMG_JPEG_QUALITY => { label => gettext("Site image jpeg quality") },
+            $main::GS_SITE_IMG_JPEG_QUALITY => {
+                value => sub { $self->imagelist->quality(@_) },
+                validator => Wx::Perl::TextValidator->new( '\d' ) 
+            },
+            $main::SITE_IMG_FILTER => { label => gettext("Site image filter") },
+            $main::GS_SITE_IMG_FILTER => {
+                string_selection =>  sub { $self->imagelist->filter(@_) },
+                choices =>
+                [
+                    qw/Point Box Triangle Hermite Hanning Hamming Blackman Gaussian Quadratic Cubic Catrom Mitchell Lanczos Bessel Sinc/  
+                ],
+            },
+            $main::SITE_IMG_BLUR => { label => gettext("Site image blur") },
+            $main::GS_SITE_IMG_BLUR => {
+                value => sub { $self->imagelist->blur(@_) },
+                validator => Wx::Perl::TextValidator->new( '\d' ) 
+            },
+            $main::SITE_IMG_INTERLACE => { label => gettext("Site image interlace") },
+            $main::GS_SITE_IMG_INTERLACE => {
+                string_selection => sub { $self->imagelist->interlace(@_) },
+                choices =>
+                [
+                    qw/None Line Plane Partition JPEG GIF PNG/  
+                ],
+            },
+            $main::GS_REMOVE_UPLOADED_FROM_SELECTION => {
+                label => gettext("Remove uploaded photo from selection"),
+                value => sub { $self->imagelist->remove_uploaded_from_selection(@_) },
+            },
+            $main::GS_HD_UPLOAD => {
+                choices  =>
+                [
+                    map { gettext $_ } @{wxTheApp->upload_hd}
+                ],
+                pre_process => sub { my ( $value ) = @_; wxTheApp->eng_upload_hd->{$value} },
+                string_selection => sub { $self->imagelist->upload_hd(@_) },
+                frame_callback => sub { 
+                    my( $self, $ctrl, $event ) = @_; 
+                    $self->OnHDUpload($event);
+                },
+            },
+            $main::HD_IMG_WIDTH => { label => gettext("Maximum width") },
+            $main::GS_HD_IMG_WIDTH => {
+                label => gettext("HD image width"),
+                value => sub { $self->imagelist->hd_w(@_) },
+                validator => Wx::Perl::TextValidator->new( '\d' ) 
+            },
+            $main::HD_IMG_HEIGHT => { label => gettext("Maximum height") },
+            $main::GS_HD_IMG_HEIGHT => {
+                label => gettext("HD image height"),
+                value => sub { $self->imagelist->hd_h(@_) },
+                validator => Wx::Perl::TextValidator->new( '\d' ) 
+            },
+            $main::HD_IMG_JPEG_QUALITY => { label => gettext("HD image jpeg quality") },
+            $main::GS_HD_IMG_JPEG_QUALITY => {
+                value => sub { $self->imagelist->hd_quality(@_) },
+                validator => Wx::Perl::TextValidator->new( '\d' ) 
+            },
+            $main::HD_IMG_FILTER => { label => gettext("HD image filter") },
+            $main::GS_HD_IMG_FILTER => {
+                string_selection =>  sub { $self->imagelist->hd_filter(@_) },
+                choices =>
+                [
+                    qw/Point Box Triangle Hermite Hanning Hamming Blackman Gaussian Quadratic Cubic Catrom Mitchell Lanczos Bessel Sinc/  
+                ],
+            },
+            $main::HD_IMG_BLUR => { label => gettext("HD image blur") },
+            $main::GS_HD_IMG_BLUR => {
+                value => sub { $self->imagelist->hd_blur(@_) },
+                validator => Wx::Perl::TextValidator->new( '\d' ) 
+            },
+            $main::HD_IMG_INTERLACE => { label => gettext("HD image interlace") },
+            $main::GS_HD_IMG_INTERLACE => {
+                string_selection => sub { $self->imagelist->hd_interlace(@_) },
+                choices =>
+                [
+                    qw/None Line Plane Partition JPEG GIF PNG/  
+                ],
+            },
+            $main::GS_WMARK_ACTIVATE => {
+              label  => gettext("Activate watermark"),
+              value  => sub { $self->imagelist->watermark_activate(@_) },
+              frame_callback => sub { 
+                  my( $self, $ctrl, $event ) = @_; 
+                  $self->OnWatermark($event);
+              },
+            },
+            $main::GS_WMARK_ACTIVATE_HD => {
+              label => gettext("Activate watermark on high definition"),
+              value => sub { $self->imagelist->watermark_activate_pwg_high(@_) },
+              frame_callback => sub { 
+                  my( $self, $ctrl, $event ) = @_; 
+                  $self->OnWatermark($event);
+              },
+            },
+            $main::WMARK_TEXT => { label  => gettext("Text") },
+            $main::GS_WMARK_TEXT => { 
+              value  => sub { $self->imagelist->watermark_text(@_) },
+            },
+            $main::WMARK_TEXT_SIZE => { label     => gettext("Text size") },
+            $main::GS_WMARK_TEXT_SIZE => {
+                value   => sub { $self->imagelist->watermark_text_size(@_) },
+            },
+            $main::WMARK_COLOR => { label     => gettext("Color") },
+            $main::GS_WMARK_COLOR => {
+                string_selection => sub { $self->imagelist->watermark_color(@_) },
+                choices   => [
+                               map { gettext $_ } @{wxTheApp->colors}
+                             ],
+                pre_process => sub { my ( $value ) = @_; wxTheApp->eng_colors->{$value} },
+            },
+            $main::WMARK_POSITION => { label     => gettext("Position") },
+            $main::GS_WMARK_POSITION => {
+                string_selection => sub { $self->imagelist->watermark_position(@_) },
+                choices  => [
+                               map { gettext $_ } @{wxTheApp->positions}
+                           ],
+                pre_process => sub { my ( $value ) = @_; wxTheApp->eng_positions->{$value} },
+            },
+            $main::WMARK_MARGIN_TOP => { label => gettext("Top margin") },
+            $main::GS_WMARK_MARGIN_TOP => {
+                value   => sub { $self->imagelist->watermark_y(@_) },
+            },
+            $main::WMARK_MARGIN_LEFT => { label => gettext("Left margin") },
+            $main::GS_WMARK_MARGIN_LEFT => {
+                value   => sub { $self->imagelist->watermark_x(@_) },
+            },
+            $main::CHUNK_SIZE => { label => gettext("Transfert chunk size") },
+            $main::GS_CHUNK_SIZE => {
+                value   => sub { wxTheApp->chunk_size(@_) },
+                validator => Wx::Perl::TextValidator->new( '\d' ) 
+            },
+            $main::LANGUAGE => { label => gettext("Choose a language") },
+            $main::GS_LANGUAGE => {
+                selection => sub { wxTheApp->current_language(@_) },
+                choices => [ map { sprintf($_->[0], gettext($_->[2])) } @{wxTheApp->available_languages} ],
+                pre_process => sub { my ( $value ) = @_; wxTheApp->available_languages->[$value][1] },
+                frame_callback => sub { my ( $self, $ctrl, $event ) = @_;
+                    Wx::LogMessage(
+                        sprintf(
+                            "%s : %s",  
+                            gettext("pLoader needs to be restarted to display the new selected language"),
+                            gettext(wxTheApp->available_languages->[$event->GetSelection][2])
+                        )
+                    );
+                    wxTheApp->layout_clean(1);
+                },
+            },
+        }    
+    );
+
+    $self->piwigo_property_list(
+        [
+            {
+                label => gettext("Photo caption"),
+            },
+            {
+                label => gettext("Comment"),
+            },
+            {
+                label => gettext("Author"),
+            },
+            {
+                label => gettext("File name"),
+            },
+            {
+                label => gettext("Create date"),
+            },
+        ]    
+    );
+
+    $self->exif_properties(
+        [
+            {
+                label    => gettext("Create date"),
+                value    => sub { $self->imagelist->current_image->create_date }, 
+                readonly => 1,
+            },    
+            {
+                label    => gettext("Model"),
+                value    => sub { $self->imagelist->current_image->exif_tag('Model') }, 
+                readonly => 1,
+            },    
+            {
+                label    => gettext("Width"),
+                value    => sub { $self->imagelist->current_image->exif_tag('ImageWidth') }, 
+                readonly => 1,
+            },    
+            {
+                label    => gettext("Height"),
+                value    => sub { $self->imagelist->current_image->exif_tag('ImageHeight') }, 
+                readonly => 1,
+            },    
+            {
+                label    => gettext("Orientation"),
+                value    => sub { $self->imagelist->current_image->exif_tag('Orientation') }, 
+                readonly => 1,
+            },    
+            {
+                label    => "ISO",
+                value    => sub { $self->imagelist->current_image->exif_tag('ISO') }, 
+                readonly => 1,
+            },    
+            {
+                label    => gettext("Shutter speed"),
+                value    => sub { $self->imagelist->current_image->exif_tag('ExposureTime') }, 
+                readonly => 1,
+            },    
+            {
+                label    => gettext("Aperture"),
+                value    => sub { $self->imagelist->current_image->exif_tag('ApertureValue') }, 
+                readonly => 1,
+            },    
+            {
+                label    => gettext("Focal length"),
+                value    => sub { $self->imagelist->current_image->exif_tag('FocalLength') }, 
+                readonly => 1,
+            },    
+            {
+                label    => gettext("Lens"),
+                value    => sub { $self->imagelist->current_image->exif_tag('Lens') }, 
+                readonly => 1,
+            },    
+        ]
+    );   
+
+    $self->image_tags(
+        sub { scalar @{$self->imagelist->image_selection} > 1 ? $self->imagelist->SetImageSelectionTags(@_) : $self->imagelist->current_image->site_tags(@_)||[]  }
+    );
+
+    $self->piwigo_tags(
+        sub { wxTheApp->pwg->tags }
+    );    
+}
+
+sub init_image_types {
+    my ( $self ) = @_;
+
+    $self->{IMGTYPE} = {
+        'jpg' => wxBITMAP_TYPE_JPEG,
+        'gif' => wxBITMAP_TYPE_GIF,
+        'png' => wxBITMAP_TYPE_PNG,
+    };
+}
+
+
+sub init_frame {
+    my ( $self ) = @_;
+    
+    $self->create_toolbar;
+
+    my $sizer_h = Wx::BoxSizer->new( wxHORIZONTAL );
+    
+
+
+    $self->imageviewer(
+        Uploader::GUI::wxImageListCtrl->new( 
+            { 
+                parentwnd => $self,
+                imagelist => $self->imagelist,
+                image_size => $self->imagelist->wx_thumb_size,
+                columns => $self->piwigo_property_list,
+            }
+        )
+    );
+
+
+    $self->piwigo_photo_properties_dlg (
+        Uploader::GUI::wxPhotoProperties->new(
+            {
+                parentwnd  => $self,
+                categories => [ @{$self->pwg->categories}],
+                properties => $self->piwigo_photo_properties,
+                tags       =>
+                {
+                    id => $main::PHOTO_PROPERTIES_TAG,
+                    choices => $self->piwigo_tags,
+                    selection => $self->image_tags,
+                    creation_callback => sub { $self->_create_piwigo_tag(@_) },
+               },
+            }
+        )
+    );
+
+    $self->piwigo_photo_properties_tags(
+        $self->piwigo_photo_properties_dlg->FindWindow($main::PHOTO_PROPERTIES_TAG)
+    );
+
+    $self->tree(
+        $self->piwigo_photo_properties_dlg->FindWindow($main::PHOTO_PROPERTIES_CATEGORIES)
+    );
+
+    $self->init_dnd_targets;
+    $self->init_dialogs;
+    $self->show_hide_pwg_categories_empty_msg;
+
+    if( $self->imagelist->wx_thumb_imglist->GetImageCount){
+        $self->ShowImageViewer;
+        
+        $self->imageviewer->Refresh(
+            $self->imagelist->wx_thumb_imglist
+        );
+       
+        $self->OnUpdateImageviewerNotEmpty;
+    }
+    else{
+        $self->OnUpdateImageviewerEmpty;
+    }
+
+    # the imageviewer has a stretch factor of 1 : expands its size on frame resize
+    $sizer_h->Add( $self->imageviewer, 1, wxEXPAND|wxALL, 2 );
+    $sizer_h->Add( $self->piwigo_photo_properties_dlg, 0, wxEXPAND|wxALL, 2 );
+
+
+    $self->SetSizer(
+        $sizer_h
+    );
+    my $new_size = $sizer_h->Fit(
+        $self
+    );
+    $self->SetMinSize([600, 660]);
+    $self->Center;
+}
+
+
+sub _create_piwigo_tag {
+    my ( $self, $name ) = @_;
+    
+    if(
+        Wx::MessageBox( 
+            sprintf(
+                "%s \"%s\" ?",
+                gettext("Do you want to create"), 
+                $name,
+            ),
+            gettext("Piwigo search information"),
+            wxYES_NO | wxICON_QUESTION, 
+        ) == wxYES 
+    ){    
+        $self->pwg->AddTags($name);
+        $self->pwg->RefreshTags;
+    }
+}
+
+
+sub OnUpdateImageviewerEmpty {
+    my ( $self ) = @_;
+
+    $self->piwigo_photo_properties_dlg->SetDisabled;
+    $self->imageviewer->OnEmpty;
+}
+
+sub OnUpdateImageviewerNotEmpty {
+    my ( $self ) = @_;
+
+    $self->piwigo_photo_properties_dlg->SetEnabled;
+    $self->imageviewer->OnNotEmpty;
+}
+
+
+sub init_dialogs {
+    my ( $self ) = @_;    
+
+
+    $self->exif_dlg(
+        Uploader::GUI::wxPropertyListDlg->new( 
+            { 
+                parentwnd       => $self,
+                properties      => $self->exif_properties,
+                caption         => sprintf("%s - EXIF", gettext("Properties")),
+            }
+        )
+    );
+    $self->exif_dlg->Hide;
+
+    $self->global_settings_dlg(
+        Uploader::GUI::wxGlobalSettings->new( 
+            { 
+                parentwnd       => $self,
+                caption         => gettext("Global settings"),
+                properties      => $self->global_settings,
+            }
+        )
+    );
+    $self->global_settings_dlg->Hide;
+
+    $self->image_preview_dlg(
+        Uploader::GUI::wxImagePreview->new(
+            { 
+                parentwnd    => $self,
+                caption      => gettext("Preview"),
+            }
+        )
+    );
+
+    $self->destination_category_dlg(
+        Uploader::GUI::wxDestinationCategoryDlg->new(
+            { 
+                parentwnd    => $self,
+                caption      => gettext("Upload to Piwigo"),
+                categories   => [@{$self->pwg->categories}],
+                properties   => {
+                                    $main::CHOOSE_DESTINATION => { label => wxTheApp->branding->{'What is the destination category?'} },
+                                    $main::DESTINATION_CATEGORIES_OK => { label=>gettext("Upload to Piwigo")},
+                                    $main::DESTINATION_CATEGORIES_CANCEL => { label=>gettext("Cancel")},
+                                    $main::DESTINATION_CATEGORIES => {
+                                        id_selection => sub { $self->imagelist->categories(@_) },
+                                        frame_callback => sub {
+                                            my ( $dlg, $ctrl, $evt ) = @_;
+                                            $dlg->FindWindow($main::DESTINATION_CATEGORIES_OK)->Enable(scalar @{$self->imagelist->categories});
+                                        },
+                                    },
+                                },
+                frame_callback => sub { $self->OnRefreshCategories },
+            }
+        )
+    );
+
+    $self->destination_category_dlg->Hide;
+
+    $self->destination_categories(
+        $self->destination_category_dlg->FindWindow($main::DESTINATION_CATEGORIES)
+    );
+
+    $self->categories_treectrl(
+        [
+            $self->destination_categories,
+            $self->tree,
+        ]
+    );
+
+}
+
+
+sub init_dnd_targets {
+    my ( $self ) = @_;    
+
+    $self->imageviewer->SetDropTarget( 
+        DNDImageListDropTarget->new(
+            $self->imageviewer 
+        ) 
+    );
+
+    $self->tree->SetDropTarget( 
+        DNDCategoryTreeDropTarget->new(
+            $self->tree
+        )
+    );
+    
+}
+
+
+sub OnPhotoProperties {
+    my ( $self ) = @_;
+
+    $self->exif_dlg->Show(1);
+}
+
+
+sub OnPreview {
+    my ( $self ) = @_;
+
+    $self->image_preview_dlg->Show(1);
+}
+
+
+sub OnGlobalSettings {
+    my ( $self ) = @_;
+
+    $self->global_settings_dlg->Show(1);
+}
+
+
+sub OnGeneralSettingsClose {
+    my ( $self, $event ) = @_;
+
+    $self->global_settings_dlg->Hide;
+}
+
+
+sub OnImageExifPropClose {
+    my ( $self, $event ) = @_;
+
+    $self->image_exif_prop->Hide;
+}
+
+
+
+
+sub show_hide_pwg_categories_empty_msg {
+    my ( $self ) = @_;
+
+    map {
+        $_->GetCount > 1 ?
+            $_->HideEmptyMsg :
+            $_->ShowEmptyMsg;
+    }@{$self->categories_treectrl};
+
+}
+
+
+sub init_menus {
+    my ( $self ) = @_ ;
+
+    $self->_tree_mnu;
+    $self->_imageviewer_mnu;    
+}
+
+
+sub _tree_mnu {
+    my ( $self ) = @_;    
+
+    my $ctx_mnu = Wx::Menu->new;
+    
+    map {
+        $ctx_mnu->Append(
+            @$_[0..2], wxITEM_NORMAL
+        );
+    }
+    (
+        # workaround : first item does not show bitmap
+        [
+            0, 
+            "",
+            "",
+            wxTheApp->resource_path('mnu_folder_new.png'),
+        ],
+        [
+            1+$ID_TREE_CTX_MENU, 
+            wxTheApp->branding->{'Add new category'},
+            sprintf(
+                "%s %s %s %s", 
+                gettext("Add a new"), 
+                wxTheApp->branding->{category},
+                gettext("to the currently selected"),
+                wxTheApp->branding->{category},
+            ),
+            wxTheApp->resource_path('mnu_folder_new.png'),
+        ],
+        [
+            2+$ID_TREE_CTX_MENU, 
+            gettext("Refresh"),
+            sprintf(
+                "Refresh %s list.",
+                wxTheApp->branding->{category},
+            ),
+            wxTheApp->resource_path('mnu_refresh.png'),
+        ],
+        [
+            3+$ID_TREE_CTX_MENU, 
+            gettext("Expand all"),
+            sprintf(
+                "Expand %s list.",
+                wxTheApp->branding->{category},
+            ),
+            wxTheApp->resource_path('mnu_expandall.png'),
+        ],
+        [
+            4+$ID_TREE_CTX_MENU, 
+            gettext("Collapse all"),
+            sprintf(
+                "Collapse %s list.",
+                wxTheApp->branding->{category},
+            ),
+            wxTheApp->resource_path('mnu_collapseall.png'),
+        ],
+    );
+
+    $ctx_mnu->Delete(0);
+    $self->tree_mnu(
+         $ctx_mnu
+    );    
+}    
+
+sub _imageviewer_mnu {
+    my ( $self ) = @_;    
+
+    my $ctx_mnu = Wx::Menu->new;
+    
+    map {
+        $ctx_mnu->Append(
+            @$_[0..2]
+        );
+    }
+    (
+        # workaround : first item does not show bitmap
+        [
+            0, 
+            "",
+            "",
+            wxTheApp->resource_path('mnu_properties.png'),
+        ],
+        [
+            1+$ID_IMAGEVIEWER_CTX_MENU, 
+            gettext("Properties"),
+            gettext("Modify photo properties"),
+            wxTheApp->resource_path('mnu_properties.png'),
+        ],
+        [
+            2+$ID_IMAGEVIEWER_CTX_MENU, 
+            gettext("Preview"),
+            gettext("Display photo preview"),
+            wxTheApp->resource_path('mnu_preview.png'),
+        ],
+    );
+    
+    $ctx_mnu->Delete(0);
+    $self->imageviewer_mnu(
+         $ctx_mnu
+    );    
+}
+
+sub init_event_handlers {
+    my ( $self ) = @_ ;
+    
+    Wx::Event::EVT_MENU( $self, 101, \&OnAddImages );
+    Wx::Event::EVT_MENU( $self, 102, \&OnRemoveImages );
+    Wx::Event::EVT_MENU( $self, 103, \&OnUploadImages );
+    Wx::Event::EVT_MENU( $self, 104, \&OnGlobalSettings );
+    Wx::Event::EVT_CHOICE( $self, 106, \&OnPhotoSelMode );
+    Wx::Event::EVT_TREE_SEL_CHANGED( $self, $self->tree, \&OnTreeSelChanged );
+    Wx::Event::EVT_TREE_ITEM_RIGHT_CLICK( $self, $self->tree, \&OnTreeItemRightClick );
+    Wx::Event::EVT_TREE_END_LABEL_EDIT( $self, $self->tree, \&OnTreeEndLabelEdit );
+
+    Wx::Event::EVT_LIST_END_LABEL_EDIT( $self, $self->imageviewer, \&OnImageViewerEndLabelEdit );
+    Wx::Event::EVT_LIST_ITEM_ACTIVATED( $self, $self->imageviewer, \&OnImageViewerItemActivated );
+    Wx::Event::EVT_LIST_ITEM_SELECTED($self, $self->imageviewer, \&OnImageViewerItemSelected) ;
+    Wx::Event::EVT_LIST_ITEM_DESELECTED($self, $self->imageviewer, \&OnImageViewerItemDeSelected) ;
+    Wx::Event::EVT_LIST_ITEM_RIGHT_CLICK($self, $self->imageviewer, \&OnImageViewerItemRightClick) ;
+
+    Wx::Event::EVT_LIST_KEY_DOWN($self, $self->imageviewer, \&OnImageViewerKeyDown) ;
+
+    Wx::Event::EVT_CLOSE( $self, \&OnClose );
+
+    Wx::Event::EVT_MENU( $self, 1+$ID_TREE_CTX_MENU, \&OnAddCategory );
+    Wx::Event::EVT_MENU( $self, 2+$ID_TREE_CTX_MENU, \&OnRefreshCategories );
+    Wx::Event::EVT_MENU( $self, 3+$ID_TREE_CTX_MENU, \&OnExpandCategories );
+    Wx::Event::EVT_MENU( $self, 4+$ID_TREE_CTX_MENU, \&OnCollapseCategories );
+
+    Wx::Event::EVT_MENU( $self, 1+$ID_IMAGEVIEWER_CTX_MENU, \&OnPhotoProperties );
+    Wx::Event::EVT_MENU( $self, 2+$ID_IMAGEVIEWER_CTX_MENU, \&OnPreview );
+
+    Wx::Event::EVT_BUTTON( $self, $main::PHOTO_PROPERTIES_UPLOAD, \&OnUploadImages );
+    Wx::Event::EVT_BUTTON( $self, $self->imageviewer->add_button->GetId, \&OnAddImages );
+    Wx::Event::EVT_KEY_DOWN($self, \&OnKeyDown );
+
+    # only refresh when calling event is finished
+    Wx::Event::EVT_IDLE(
+        $self,
+        sub {
+            my ( $self, $event ) = @_;
+
+            if ( $self->image_preview_need_refresh and $self->image_preview_dlg->IsShown ){
+                $self->set_preview_image; 
+                $self->image_preview_dlg->Refresh;
+                $self->image_preview_need_refresh(0);
+            }
+
+            if($self->imageviewer_refresh){
+                $self->imageviewer->Refresh;
+                $self->imageviewer_refresh(0);
+            }
+
+            if($self->imageviewer_item_refresh){
+                # for batch mode
+                map {
+                    $self->imageviewer->ItemRefresh(
+                        $_
+                    )
+                } @{$self->imageviewer->GetSelectedItems};
+                $self->imageviewer_item_refresh(0);
+            }
+
+            if(!$self->selected_images_count and $self->piwigo_photo_properties_dlg->IsEnabled){
+                $self->piwigo_photo_properties_dlg->SetDisabled;
+            }
+
+            $self->OnUpdateToolbar;
+            $event->Skip;
+        }
+    );
+
+}
+
+
+sub selected_images_count {
+    my ( $self ) = @_;
+
+    scalar @{$self->imageviewer->GetSelectedItems};
+}
+
+{
+  my $prevfile;
+  my $prevdir;
+
+  sub OnAddImages {
+    my( $self, $event ) = @_;
+
+    $prevdir = wxTheApp->default_openfile_dir if ( -d wxTheApp->default_openfile_dir);
+    my $dialog = Wx::FileDialog->new
+      ( $self, gettext("Select photos for upload"), $prevdir, $prevfile,
+        sprintf("%s (*.JPG;*.jpg)|*.JPG;*.jpg|%s (*.*)|*.*", gettext("JPEG files"), gettext("All")),
+        wxFD_OPEN|wxFD_MULTIPLE );
+
+    my $file_paths = [];
+    if( $dialog->ShowModal != wxID_CANCEL ) {
+        @$file_paths = $dialog->GetPaths;
+        $self->SetNewFiles($file_paths) ;
+    }
+    wxTheApp->default_openfile_dir(
+        $dialog->GetDirectory
+    );
+    $dialog->Destroy;
+  }
+}
+
+
+sub OnUpdateToolbar {
+    my( $self ) = @_;
+    
+    if($self->global_settings_dlg->IsShown){
+        $self->toolbar->EnableTool(104, 0);
+    }
+    else{    
+        $self->toolbar->EnableTool(104, 1);
+    }
+
+    if($self->global_settings_dlg->IsShown){
+        $self->toolbar->EnableTool(104, 0);
+    }
+    else{    
+        $self->toolbar->EnableTool(104, 1);
+    }
+
+}
+
+
+sub OnRemoveImages {
+    my( $self, $event ) = @_;
+
+    
+    $self->imagelist->RemoveImageSelection;
+    $self->imageviewer->Refresh;    
+
+    if (!$self->imageviewer->GetItemCount){
+        $self->image_preview_dlg->image(
+            0
+        ); 
+        # have to reset
+        $self->piwigo_photo_properties_dlg->ClearProperties;
+        $self->piwigo_photo_properties_tags->ClearAllSelection;
+        $self->imagelist->SetCurrentImage(-1);
+        $self->OnUpdateImageviewerEmpty;
+    }
+    else{
+        $self->OnUpdateImageviewerNotEmpty;
+    }
+
+    if(!$self->multi_selection_mode){
+        $self->OnUpdateSingleSelectionModeUI;
+    }
+
+    $self->image_preview_dlg->Refresh;
+    $self->exif_dlg->Refresh;
+}
+
+sub SetNewFiles {
+    my ( $self, $file_paths ) = @_;
+
+    $self->ShowImageViewer();
+    
+    $self->progressdlg->Destroy if defined $self->progressdlg;
+    $self->progressdlg( 
+        Uploader::GUI::wxImageProcessingProgressDlg->new(
+            { 
+                title => gettext("Image processing progress information"),
+                bt_label => gettext("Cancel image processing"), 
+                bt_close_label => gettext("Close"),
+                stop_processing => sub { $self->imagelist->stop_processing(1); Wx::Yield(); },
+             }
+        )        
+    );
+    $self->progressdlg->Show(1);
+    Wx::Yield();
+
+    
+    my $files = [
+        map {
+            # to make sure that unicode chars in filenames are supported
+            {
+                ANSIPathName => $^O =~ /MSWin32/ ? Win32::GetANSIPathName($_) : $_,
+                PathName => $_,
+            },
+        }@$file_paths    
+    ];
+
+    @$files = sort { $a->{PathName} cmp $b->{PathName} } @$files;    
+
+    $self->imagelist->SetNewFiles(
+        $files
+    );
+
+    
+}
+
+
+sub OnTreeSelChanged {
+    my( $self, $event ) = @_;
+
+    $self->imagelist->categories(
+        $event->GetEventObject->GetSelectionsIds
+    );
+}
+
+sub OnTreeItemRightClick {
+    my( $self, $event ) = @_;
+
+
+    $self->PopupMenu($self->tree_mnu, wxDefaultPosition);
+    
+}
+
+sub OnTreeEndLabelEdit {
+    my( $self, $event ) = @_;
+
+    my $label = $event->GetLabel;
+    
+    $label =~ s/^\s+$//;
+
+    if(defined($label) and !( "" eq $label )){
+        $self->_SetLabel($event)
+    }
+    else{
+        $event->Veto;
+    }
+}
+
+sub _SetLabel {
+    my( $self, $event ) = @_;
+    
+    my $category = $self->tree->GetPlData($event->GetItem);
+    my $category_id;
+    
+    $category_id = $category->{id} if 'HASH' eq ref($category) ;
+    my $comment;
+    my ( $success, $status_msg, $content ) = $self->pwg->SetInfoCategories( 
+        $event->GetLabel, 
+        $comment, 
+        $category_id
+    );
+
+    my $ok = 1;
+    
+    if(!$success){
+        $ok = 0;
+    }
+
+    if('fail' eq $content->{stat}){
+        $ok = 0;
+    }
+
+    # method call failed
+    if(!$ok){
+        $event->Veto;
+        Wx::MessageBox( 
+            sprintf(
+                "%s %s", 
+                gettext("Update failed : "),
+                $status_msg
+            ),
+            gettext("Piwigo update error"),
+            wxOK | wxICON_EXCLAMATION, 
+        );
+        Wx::LogMessage("%s\n\n%s", Dumper($content), gettext("This function is not available. A Piwigo upgrade may resolve this issue."));
+    }
+}
+
+sub OnImageViewerItemRightClick {
+    my( $self, $event ) = @_;
+
+    
+    $self->PopupMenu($self->imageviewer_mnu, wxDefaultPosition);
+    
+    
+}
+
+sub OnExpandCategories {
+    my ( $self, $event ) = @_;
+
+    my $parent_item = $self->tree->GetSelection;
+    $self->tree->ExpandAllChildren($parent_item);
+    $self->tree->EnsureVisible($parent_item);
+}
+
+sub OnCollapseCategories {
+    my ( $self, $event ) = @_;
+
+    my $parent_item = $self->tree->GetSelection;
+    $self->tree->CollapseAllChildren($parent_item);
+    $self->tree->Expand($parent_item) if -1 == $self->tree->GetPlData($parent_item);
+}
+
+sub OnAddCategory {
+    my ( $self, $event ) = @_;
+
+    $self->tree->AddCategory;
+
+}
+
+
+sub OnRefreshCategories {
+    my ( $self, $event ) = @_;
+
+    $self->_refresh_all_categories_helper;
+}
+
+
+sub _refresh_all_categories_helper {
+    my ( $self ) = @_;
+
+    my $busycursor = Wx::BusyCursor->new();
+    $self->tree->CollapseAll;
+    $self->tree->DeleteAllItems;
+    $self->pwg->RefreshCategories();
+    $self->tree->categories(
+        $self->pwg->categories
+    );
+    $self->tree->Populate;
+    $self->show_hide_pwg_categories_empty_msg;
+}
+
+
+sub OnImageViewerEndLabelEdit {
+    my( $self, $event ) = @_;
+  
+    my $image = $self->imagelist->GetImage($event->GetIndex);
+    $image->site_name(
+        $event->GetLabel
+    );
+        
+    $self->piwigo_photo_properties_dlg->SetProperties;
+}
+
+sub OnImageViewerItemActivated {
+    my( $self, $event ) = @_;
+    
+    $self->current_imageviewer_index(
+        $event->GetIndex
+    );
+
+    $self->OnPhotoProperties;
+}
+
+
+sub OnImageViewerItemSelected {
+    my( $self, $event ) = @_;
+
+    my $bc = Wx::BusyCursor->new;
+    my $indx = $event->GetIndex;
+
+    $self->piwigo_photo_properties_dlg->SetEnabled 
+        if !$self->piwigo_photo_properties_dlg->IsEnabled;
+    $self->_on_imageviewer_item_selected($indx);
+
+    $event->Skip;
+
+}
+
+sub OnImageViewerItemDeSelected {
+    my( $self, $event ) = @_;
+
+    my $bc = Wx::BusyCursor->new;
+    $self->_on_imageviewer_item_selection_changed;
+
+    $event->Skip;
+
+}
+
+sub _on_imageviewer_item_selected {
+    my ( $self, $index ) = @_;    
+    $self->current_imageviewer_index($index);
+    $self->imagelist->SetCurrentImage($index);
+    
+    $self->_on_imageviewer_item_selection_changed;
+}
+
+sub _on_imageviewer_item_selection_changed {
+    my ( $self ) = @_;    
+
+    $self->imagelist->image_selection(
+        $self->imageviewer->GetSelectedItems
+    );
+
+    # for batch mode : reset the batch buffer if single selection
+    if($self->multi_selection_mode){
+        $self->OnUpdateMultiSelectionModeUI;
+        $self->imagelist->SetImageSelectionTags([]);
+        $self->imagelist->image_selection_privacy_level(-1);
+        $self->imagelist->image_selection_name("");
+        $self->imagelist->image_selection_author("");
+        $self->imagelist->image_selection_comment("");
+        $self->imagelist->image_selection_create_date(-1);
+    }
+    else{
+        $self->OnUpdateSingleSelectionModeUI;
+    }
+    # process image_preview in idle time
+    # and when current event is processed
+    # see call to EVT_IDLE
+    $self->image_preview_need_refresh(1);
+
+    $self->piwigo_photo_properties_dlg->SetProperties if defined $self->piwigo_photo_properties_dlg;
+    $self->exif_dlg->Refresh;
+    $self->piwigo_photo_properties_tags->RefreshChoices;
+
+}
+
+sub multi_selection_mode {
+    my ( $self ) = @_;
+
+    scalar @{$self->imagelist->image_selection} > 1;
+}
+
+sub OnUpdateMultiSelectionModeUI{
+    my( $self ) = @_;
+
+
+    $self->piwigo_photo_properties_dlg->SetMultiSelectionMode(
+        $self->imageviewer->GetSelectectItemsCount
+    );
+}
+
+sub OnUpdateSingleSelectionModeUI{
+    my( $self ) = @_;
+
+    $self->piwigo_photo_properties_dlg->SetSingleSelectionMode;
+}
+
+
+sub set_preview_image {
+    my ( $self ) = @_;    
+
+    my $current_image = $self->imagelist->current_image;
+    my $image = Wx::Image->new;
+    $image->LoadFile(
+        $current_image->file, 
+        wxBITMAP_TYPE_ANY
+    );
+  
+    if($self->imagelist->auto_rotate){
+        # exif from original image
+        my $orientation = $current_image->exif_metadata->{Orientation};
+
+        # Valid for Rotate 180, Rotate 90 CW, Rotate 270 CW
+        if( $orientation =~ m/Rotate (\d+)/ ){
+            for(my $i=0; $i < floor($1/90) ; $i++){
+                $image = $image->Rotate90;
+            }                
+        }
+    }
+
+    $self->image_preview_dlg->image_size(
+        [$image->GetWidth, $image->GetHeight, ]
+    );        
+
+    $self->image_preview_dlg->image(
+        $image
+    );        
+}
+
+sub OnImageViewerKeyDown {
+    my( $self, $event ) = @_;
+
+    if(WXK_DELETE == $event->GetKeyCode){
+        $self->OnRemoveImages();
+        
+        my $index = $self->current_imageviewer_index < $self->imageviewer->GetItemCount ?
+            $self->current_imageviewer_index : $self->imageviewer->GetItemCount -1 ;
+        $self->imageviewer->SelectItem(
+            $index
+        );
+        $self->imageviewer->EnsureVisible(
+            $index
+        );
+    }    
+
+}
+
+
+sub OnUploadImages {
+    my( $self, $event ) = @_;
+
+    my $select_all = 1;
+    eval {
+        $self->ProcessImageSelection( $select_all );    
+    };
+}
+
+# remove image from imagelist when uploaded
+sub UploadImagesViewerRefresh {
+    my ( $self ) = @_;    
+
+
+    $self->imageviewer->Refresh;
+
+    if(!$self->imageviewer->GetItemCount){
+        $self->image_preview_dlg->image(0);
+        $self->OnUpdateImageviewerEmpty;
+    }
+    # reset previous selection
+    $self->imagelist->image_selection(
+        []
+    );
+
+    if(!$self->multi_selection_mode){
+        $self->OnUpdateSingleSelectionModeUI;
+    }
+
+    $self->image_preview_dlg->Refresh;
+    Wx::Yield();
+}
+
+sub UploadProgressMessageRefresh {
+    my ( $self, $msg ) = @_;    
+
+    Wx::Yield();
+
+    $self->upload_progressdlg->processing(
+        $msg   
+    );    
+    $self->upload_progressdlg->LogProgress();
+
+    Wx::Yield();
+}
+
+sub UploadProgressMessageDetailsRefresh {
+    my ( $self, $msg ) = @_;    
+
+    Wx::Yield();
+
+    $self->upload_progressdlg->processing_details(
+        $msg   
+    );    
+    $self->upload_progressdlg->LogProgress();
+
+    Wx::Yield();
+}
+
+
+sub UploadProgressThumbnailRefresh {
+    my ( $self ) = @_;    
+
+    my $imagelist = $self->imagelist ;
+
+ 
+    $self->upload_progressdlg->image->SetBitmap(wxNullBitmap);
+    $self->upload_progressdlg->image->SetBitmap(
+        Wx::Bitmap->new( 
+            $self->imagelist->current_image->wx_thumb_file, 
+            $self->GetWxBitmapType($self->imagelist->type), 
+        )
+    );
+
+    Wx::Yield();
+}
+
+sub UploadProgressBarRefresh {
+    my ( $self, $value ) = @_;    
+
+    eval {
+        $self->upload_progressdlg->progress(
+            $value
+        );
+        $self->upload_progressdlg->LogProgress();
+    };
+    #croak gettext("Upload cancelled") if $@;
+
+    Wx::Yield();
+}
+
+sub SetNewFilesDisplayEndInfo {
+    my ( $self, $msg, $errors ) = @_;    
+    
+    if($errors){
+        $self->progressdlg->DisplayEndInfo($msg);
+    }
+    else{
+        $self->progressdlg->Show(0);
+    }
+}
+
+sub UploadDisplayEndInfo {
+    my ( $self, $msg ) = @_;    
+    
+    my $imagelist = $self->imagelist ;
+    
+    $self->upload_progressdlg->DisplayEndInfo($msg);
+}
+
+sub ShowImageViewer {
+    my ( $self ) = @_;    
+
+    if(!$self->imageviewer->IsShown){
+        $self->imageviewer->Show(1);
+    }
+}
+
+
+sub SetNewFilesViewerRefresh {
+
+    my ( $self ) = @_;    
+
+    my $wximagelist = $self->imagelist->wx_thumb_imglist;
+    #print Dumper "SetNewFilesViewerRefresh", $self->imagelist->current_image;
+    my $indx = $wximagelist->Add(
+        Wx::Bitmap->new( 
+            $self->imagelist->current_image->wx_thumb_file, 
+            $self->GetWxBitmapType($self->imagelist->type), 
+        )
+    ) if defined $self->imagelist->current_image->wx_thumb_file;
+    #print $self->imagelist->current_image->wx_thumb_file, " added with index ", $indx, "\n";    
+    
+    $self->imageviewer->Refresh(
+        $wximagelist
+    );
+
+    $self->OnUpdateImageviewerNotEmpty if $self->imageviewer->GetItemCount;
+
+    Wx::Yield();
+}
+
+
+sub GetWxBitmapType {
+    my ( $self, $type ) = @_;
+    
+    $self->{IMGTYPE}->{$type};
+}
+
+
+# prepare and upload image_selection
+sub ProcessImageSelection {
+    my ( $self, $select_all ) = @_;
+
+    return if wxTheApp->CheckUpload;
+    return if !scalar @{$self->imagelist->sums};
+
+    if( $self->destination_categories_are_empty ){
+        return unless $self->destination_category_dlg->ShowModal != wxID_CANCEL;
+    }
+
+    $self->imagelist->image_selection(
+        $self->imageviewer->GetAllItems
+    ) if $select_all;
+       
+    return if( !defined $self->imagelist->image_selection );
+    return if( !scalar @{$self->imagelist->image_selection} );
+        
+    $self->upload_progressdlg->Destroy if defined $self->upload_progressdlg;
+    $self->upload_progressdlg(
+        Uploader::GUI::wxImageProcessingProgressDlg->new(
+            { 
+                title    => gettext("Image upload progress information"),
+                bt_label => gettext("Cancel upload"),
+                bt_close_label => gettext("Close"), 
+                stop_processing => sub { $self->imagelist->stop_processing(1); Wx::Yield(); }, 
+            }
+        )
+    );
+
+    # modeless dialog
+    $self->upload_progressdlg->Show(1);
+    Wx::Yield();
+    eval {
+        $self->imagelist->UploadSelection;
+    };
+    if($@){
+        Wx::MessageBox( 
+            sprintf(
+                gettext("Upload cancelled"),
+            ),
+            gettext("Piwigo upload information"),
+            wxOK | wxICON_INFORMATION, 
+        );
+    }
+}
+
+
+sub destination_categories_are_empty {
+    my ( $self ) = @_;
+
+    !scalar @{$self->imagelist->categories};
+}
+
+
+sub SetNewFilesProgress {
+    my ( $self ) = @_;
+
+    my $imagelist = $self->imagelist;
+
+    $self->progressdlg->processing(
+        sprintf(
+            $imagelist->progress_msg, 
+            $imagelist->current_image->file,
+        )
+    );
+
+    eval {
+        $self->progressdlg->image->SetSize([ $imagelist->wx_thumb_size, $imagelist->wx_thumb_size]);
+        $self->progressdlg->image->SetBitmap(wxNullBitmap);
+        $self->progressdlg->image->SetBitmap(
+            Wx::Bitmap->new( 
+                $imagelist->current_image->wx_thumb_file,
+                $self->GetWxBitmapType( $imagelist->type )
+            )
+        );
+        $self->progressdlg->progress(
+            $imagelist->count * ( 100/scalar @{$imagelist->new_files} )
+        );
+        $self->progressdlg->LogProgress();
+    };
+    Wx::Yield();
+}
+
+sub OnClose {
+  my $self = shift;
+
+
+    # Restaure previous log wnd
+    Wx::Log::SetActiveTarget( $self->oldlogwnd );
+
+    # allways store
+  
+    wxTheApp->StoreConnectionProperties;
+    
+    $self->imagelist->Store;
+    wxTheApp->login_dlg->Destroy;    
+
+    
+    wxTheApp->imageviewerIndex(
+        $self->current_imageviewer_index
+    );
+    
+    my $frameLayout = {};
+    
+    ( $frameLayout->{pX}, $frameLayout->{pY}, $frameLayout->{W}, $frameLayout->{H} ) = ( $self->GetPositionXY, $self->GetSizeWH ) ; 
+    
+    wxTheApp->frameLayout(
+        $frameLayout
+    );
+
+    wxTheApp->StoreLayoutProperties;
+
+    #destroy hidden dialogs
+    $self->global_settings_dlg->Destroy;
+    $self->image_preview_dlg->Destroy;
+    $self->exif_dlg->Destroy;
+    $self->destination_category_dlg->Destroy;
+
+    $self->progressdlg->Destroy if defined $self->progressdlg;
+    $self->upload_progressdlg->Destroy if defined $self->upload_progressdlg;
+
+    $self->Destroy;
+}
+
+
+sub create_toolbar {
+    my( $self ) = @_;
+
+    my $tb = Wx::ToolBar->new( $self, -1, wxDefaultPosition, [600, -1], wxTB_FLAT|wxTB_TEXT );
+    $tb->SetToolBitmapSize( wxSIZE( 32, 32 ) );
+    map {
+        my $icon1 = Wx::Icon->new();
+        eval {
+            $icon1->LoadFile($_->[2], $_->[3]);
+        };
+        my $tb_icon1 = Wx::Bitmap->new( $icon1 );
+
+        my $icon2 = Wx::Icon->new();
+        eval {
+            $icon2->LoadFile($_->[5], $_->[3]);
+        };
+        my $tb_icon2 = Wx::Bitmap->new( $icon2 );
+
+
+        $tb->AddTool( $_->[0], $_->[1], $tb_icon1, $tb_icon2, wxITEM_NORMAL, $_->[6] );
+        $tb->EnableTool( $_->[0], $_->[4]);
+    }
+    (
+        [
+            101, 
+            gettext("Add photos"), 
+            wxTheApp->resource_path('tb_add.png'), 
+            wxBITMAP_TYPE_PNG, 
+            1, 
+            wxTheApp->resource_path('tb_add.png'), 
+            gettext("Add photos for resizing and uploading")
+        ],
+        [
+            102, 
+            gettext("Remove selected photos"), 
+            wxTheApp->resource_path('tb_remove.png'), 
+            wxBITMAP_TYPE_PNG, 
+            1, 
+            wxTheApp->resource_path('tb_remove.png'),
+            gettext("Remove selected photos. Original files are not deleted")
+        ],
+        [
+            104, 
+            gettext("Preferences"), 
+            wxTheApp->resource_path('tb_settings.png'), 
+            wxBITMAP_TYPE_PNG, 
+            0, 
+            wxTheApp->resource_path('tb_settings.png'),
+            gettext("Change global settings")
+        ],
+    
+    );
+    
+    $tb->AddSeparator;
+    
+    $tb->AddControl(
+        Wx::Choice->new(
+        $tb,
+            106,
+            wxDefaultPosition,
+            [300, -1],
+            [],
+        )
+    );
+    my $ch = $tb->FindWindow(106);
+    $ch->SetToolTip(gettext("How photo selection is displayed"));
+    map {
+        $ch->Append(gettext($_), $_);
+    }(
+        "Thumbnail and caption",
+        "Thumbnail",
+        "Property list"
+    );
+    
+    $ch->SetStringSelection(gettext($self->imagelist->display_mode));
+    $tb->Realize;
+
+    $self->toolbar(
+        $tb
+    );
+    $self->SetToolBar($tb);
+
+    return $tb;
+}
+
+sub OnPhotoSelMode {
+    my ( $self, $event )= @_;
+    
+    $self->imagelist->display_mode(
+        $event->GetClientData
+    );
+
+    $self->imageviewer->change_display_mode(1);
+}
+
+sub _create_textctrl {
+    my( $self, $parent, $text, $size ) = @_;
+
+    return Wx::TextCtrl->new( $parent, -1, $text, [0, 0], $size,
+                              wxNO_BORDER | wxTE_MULTILINE | wxTE_READONLY  );
+}
+
+sub create_textctrl {
+    my( $self, $text, $size ) = @_;
+
+    return $self->_create_textctrl( $self, $text, $size );
+}
+
+sub DESTROY {
+    my( $self ) = @_;
+
+}
+
+
+
+1;
+
+
+
+
+
+package DNDImageListDropTarget;
+use Wx qw/wxTheApp/;
+use base qw(Wx::FileDropTarget Class::Accessor::Fast);
+
+__PACKAGE__->mk_accessors( 
+    qw/
+          imageviewer
+      /
+);
+
+sub new {
+  my $class = shift;
+  my $imageviewer = shift;
+  my $self = $class->SUPER::new( @_ );
+
+  $self->imageviewer($imageviewer);
+
+  return $self;
+}
+
+sub OnDropFiles {
+  my( $self, $x, $y, $files ) = @_;
+
+  wxTheApp->frame->SetNewFiles($files) ;
+}
+
+
+
+
+1;
+
+
+package DNDCategoryTreeDropTarget;
+
+use base qw(Wx::TextDropTarget Class::Accessor::Fast);
+use Data::Dumper;
+use Wx qw/
+              wxDragNone
+              wxDragCopy
+              wxDragMove
+              wxTheApp
+         /;
+
+__PACKAGE__->mk_accessors( 
+    qw/
+          tree
+      /
+);
+
+sub new {
+  my ( $class, $tree ) = @_;
+  my $self = $class->SUPER::new();
+
+  $self->tree($tree);
+
+  return $self;
+}
+
+
+
+sub OnDropText {
+  my( $self, $x, $y, $textdata ) = @_;
+
+  # must be $VAR1 because $textdata is the result of Data::Dumper
+  my $VAR1;
+  eval $textdata;
+  eval {
+      if(scalar @$VAR1){
+             my @items;
+             if(scalar @items < 2) {
+               my ($dropItem, $flag) = $self->tree->HitTest([$x, $y]);
+                 push @items, $dropItem;
+             }
+             else {
+                 @items = $self->tree->GetSelections;
+             }
+             
+             # remove root item which is not a valid category
+             @items = grep { $self->tree->GetPlData( $_ ) != -1 } @items;
+             
+             wxTheApp->frame->imagelist->categories(
+                 [
+                     map {
+                         $self->tree->GetPlData( $_ )->{id};
+                     }
+                     @items
+                 ]
+             );
+           
+             wxTheApp->frame->imagelist->image_selection($VAR1);
+             wxTheApp->frame->ProcessImageSelection ;
+      }    
+  };
+}
+
+
+1;
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/DestinationCategory.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/DestinationCategory.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/DestinationCategory.pm	(revision 6108)
@@ -0,0 +1,65 @@
+use strict;
+use Data::Dumper;
+use Wx qw/
+             wxVERTICAL
+             wxSWISS
+             wxNORMAL
+             wxBOLD
+             wxALIGN_CENTER
+             wxEXPAND
+             wxALL
+             wxDefaultSize
+             wxDefaultPosition
+         /;
+use Uploader::GUI::wxCategoryTreeCtrl;
+
+use vars qw($CHOOSE_DESTINATION); $CHOOSE_DESTINATION = 10000;
+use vars qw($DESTINATION_CATEGORIES); $DESTINATION_CATEGORIES = 10001;
+use vars qw($DESTINATION_CATEGORIES_OK); $DESTINATION_CATEGORIES_OK = 10002;
+use vars qw($DESTINATION_CATEGORIES_CANCEL); $DESTINATION_CATEGORIES_CANCEL = 10003;
+
+
+sub DestinationCategory {
+    my ( $parent, $params ) = @_;
+
+
+    my( $top_sizer ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+
+    my( $item1 ) = Wx::StaticText->new(
+        $parent,
+        $main::CHOOSE_DESTINATION,
+        "",
+        wxDefaultPosition,
+        [-1,40],
+        0
+    );
+    my $btfont = Wx::Font->new(12, wxSWISS, wxNORMAL, wxNORMAL );
+    $item1->SetFont($btfont);
+
+
+    $top_sizer->AddWindow( $item1, 0, wxALIGN_LEFT|wxALL, 5 );
+    $top_sizer->AddWindow(
+        Uploader::GUI::wxCategoryTreeCtrl->new(
+            {
+                parentwnd      => $parent,
+                id             => $main::DESTINATION_CATEGORIES,
+                categories     => $params->{categories}, 
+                frame_callback => $params->{frame_callback}, 
+            }
+        ), 1, wxEXPAND|wxALL, 5 );
+
+    my( $item2 ) = Wx::StdDialogButtonSizer->new();
+    $item2->SetAffirmativeButton( Wx::Button->new( $parent, $main::DESTINATION_CATEGORIES_OK, "" ) );
+    $item2->SetCancelButton( Wx::Button->new( $parent, $main::DESTINATION_CATEGORIES_CANCEL, "" ) );
+    $item2->Realize();
+    $top_sizer->Add( $item2, 0, wxEXPAND|wxALL, 5 );
+
+
+    $parent->SetSizer( $top_sizer );
+    #$top_sizer->Fit( $parent );
+
+    $top_sizer;
+}
+
+1;
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/GlobalSettings.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/GlobalSettings.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/GlobalSettings.pm	(revision 6108)
@@ -0,0 +1,500 @@
+use Wx;
+use strict;
+
+# Custom source
+use Wx qw/wxCP_DEFAULT_STYLE wxCP_NO_TLW_RESIZE/;
+
+use Wx qw( wxDefaultSize wxDefaultPosition wxNullAnimation wxNullFont wxBLACK );
+use Wx qw( wxID_OK wxID_APPLY wxID_SAVE wxID_SAVEAS wxID_CANCEL wxID_YES wxID_NO wxID_EXIT wxID_ABOUT wxID_HELP );
+use Wx qw( wxVERTICAL wxHORIZONTAL wxALL wxLEFT wxRIGHT wxTOP wxBOTTOM wxCENTRE wxGROW );
+use Wx qw( wxALIGN_RIGHT wxALIGN_BOTTOM wxALIGN_CENTER wxALIGN_CENTER_VERTICAL wxALIGN_CENTER_HORIZONTAL wxALIGN_LEFT wxALIGN_TOP);
+use Wx qw( wxST_NO_AUTORESIZE );
+
+# Bitmap functions
+
+use Wx qw( wxNullBitmap wxBITMAP_TYPE_PNG );
+
+# Window functions
+
+use vars qw($DEFAULT_PHOTO_CAPTION); $DEFAULT_PHOTO_CAPTION = 10000;
+use vars qw($GS_DEFAULT_PHOTO_CAPTION); $GS_DEFAULT_PHOTO_CAPTION = 10001;
+use vars qw($PHOTO_CAPTION_PREFIX); $PHOTO_CAPTION_PREFIX = 10002;
+use vars qw($GS_PHOTO_CAPTION_PREFIX); $GS_PHOTO_CAPTION_PREFIX = 10003;
+use vars qw($DEFAULT_AUTHOR); $DEFAULT_AUTHOR = 10004;
+use vars qw($GS_DEFAULT_AUTHOR); $GS_DEFAULT_AUTHOR = 10005;
+use vars qw($GS_AUTO_ROTATE); $GS_AUTO_ROTATE = 10006;
+
+sub GS_photo_properties {
+    my( $parent ) = $_[0];
+    my( $item0 ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    my( $item2 ) = Wx::StaticBox->new( $parent, -1, "" );
+    my( $item1 ) = Wx::StaticBoxSizer->new( $item2, wxVERTICAL );
+    $parent->{sb_photo_properties} = $item1;
+    
+    my( $item3 ) = Wx::FlexGridSizer->new( 0, 2, 0, 0 );
+    
+    my( $item4 ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    my( $item5 ) = Wx::StaticText->new( $parent, $main::DEFAULT_PHOTO_CAPTION, "text", wxDefaultPosition, wxDefaultSize, wxST_NO_AUTORESIZE );
+    $item4->AddWindow( $item5, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+    my( $item6 ) = Wx::Choice->new( $parent, $main::GS_DEFAULT_PHOTO_CAPTION, wxDefaultPosition, [190,-1], [], 0 );
+    $item4->AddWindow( $item6, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    $item3->Add( $item4, 0, 0, 5 );
+
+    my( $item7 ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    my( $item8 ) = Wx::StaticText->new( $parent, $main::PHOTO_CAPTION_PREFIX, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item7->AddWindow( $item8, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+    my( $item9 ) = Wx::TextCtrl->new( $parent, $main::GS_PHOTO_CAPTION_PREFIX, "", wxDefaultPosition, [100,-1], 0 );
+    $item7->AddWindow( $item9, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    $item3->Add( $item7, 0, 0, 5 );
+
+    my( $item10 ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    my( $item11 ) = Wx::StaticText->new( $parent, $main::DEFAULT_AUTHOR, "", wxDefaultPosition, wxDefaultSize, 0 );
+    $item10->AddWindow( $item11, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+    my( $item12 ) = Wx::TextCtrl->new( $parent, $main::GS_DEFAULT_AUTHOR, "", wxDefaultPosition, [200,-1], 0 );
+    $item10->AddWindow( $item12, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    $item3->Add( $item10, 0, 0, 5 );
+
+    my( $item13 ) = Wx::CheckBox->new( $parent, $main::GS_AUTO_ROTATE, "", wxDefaultPosition, wxDefaultSize, 0 );
+    $item3->AddWindow( $item13, 0, wxALIGN_BOTTOM|wxALL, 5 );
+
+    $item1->Add( $item3, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    $item0->Add( $item1, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $set_size ) = @_ >= 3 ? $_[2] : 1;
+    my( $call_fit ) = @_ >= 2 ? $_[1] : 1;
+    if( $set_size == 1 ) {
+         $_[0]->SetSizer( $item0 );
+         
+         if( $call_fit == 1 ) {
+             $item0->SetSizeHints( $_[0] );
+         }
+    }
+    
+    $item0;
+}
+
+use vars qw($GS_THUMBNAIL); $GS_THUMBNAIL = 10007;
+use vars qw($CPANE_THUMBNAIL); $CPANE_THUMBNAIL = 10008;
+use vars qw($THUMBNAIL_SIZE); $THUMBNAIL_SIZE = 10009;
+use vars qw($GS_THUMBNAIL_SIZE); $GS_THUMBNAIL_SIZE = 10010;
+use vars qw($THUMBNAIL_JPEG_QUALITY); $THUMBNAIL_JPEG_QUALITY = 10011;
+use vars qw($GS_THUMBNAIL_JPEG_QUALITY); $GS_THUMBNAIL_JPEG_QUALITY = 10012;
+use vars qw($GS_SITE_IMG); $GS_SITE_IMG = 10013;
+use vars qw($GS_CREATE_RESIZED); $GS_CREATE_RESIZED = 10014;
+use vars qw($CPANE_RESIZE); $CPANE_RESIZE = 10015;
+use vars qw($SITE_IMG_WIDTH); $SITE_IMG_WIDTH = 10016;
+use vars qw($GS_SITE_IMG_WIDTH); $GS_SITE_IMG_WIDTH = 10017;
+use vars qw($SITE_IMG_HEIGHT); $SITE_IMG_HEIGHT = 10018;
+use vars qw($GS_SITE_IMG_HEIGHT); $GS_SITE_IMG_HEIGHT = 10019;
+use vars qw($SITE_IMG_JPEG_QUALITY); $SITE_IMG_JPEG_QUALITY = 10020;
+use vars qw($GS_SITE_IMG_JPEG_QUALITY); $GS_SITE_IMG_JPEG_QUALITY = 10021;
+use vars qw($CPANE_RESIZE_ADVANCED); $CPANE_RESIZE_ADVANCED = 10022;
+use vars qw($SITE_IMG_FILTER); $SITE_IMG_FILTER = 10023;
+use vars qw($GS_SITE_IMG_FILTER); $GS_SITE_IMG_FILTER = 10024;
+use vars qw($SITE_IMG_BLUR); $SITE_IMG_BLUR = 10025;
+use vars qw($GS_SITE_IMG_BLUR); $GS_SITE_IMG_BLUR = 10026;
+use vars qw($SITE_IMG_INTERLACE); $SITE_IMG_INTERLACE = 10027;
+use vars qw($GS_SITE_IMG_INTERLACE); $GS_SITE_IMG_INTERLACE = 10028;
+use vars qw($GS_HD); $GS_HD = 10029;
+use vars qw($GS_HD_UPLOAD); $GS_HD_UPLOAD = 10030;
+use vars qw($CPANE_HD); $CPANE_HD = 10031;
+use vars qw($HD_IMG_WIDTH); $HD_IMG_WIDTH = 10032;
+use vars qw($GS_HD_IMG_WIDTH); $GS_HD_IMG_WIDTH = 10033;
+use vars qw($HD_IMG_HEIGHT); $HD_IMG_HEIGHT = 10034;
+use vars qw($GS_HD_IMG_HEIGHT); $GS_HD_IMG_HEIGHT = 10035;
+use vars qw($HD_IMG_JPEG_QUALITY); $HD_IMG_JPEG_QUALITY = 10036;
+use vars qw($GS_HD_IMG_JPEG_QUALITY); $GS_HD_IMG_JPEG_QUALITY = 10037;
+use vars qw($CPANE_HD_ADVANCED); $CPANE_HD_ADVANCED = 10038;
+use vars qw($HD_IMG_FILTER); $HD_IMG_FILTER = 10039;
+use vars qw($GS_HD_IMG_FILTER); $GS_HD_IMG_FILTER = 10040;
+use vars qw($HD_IMG_BLUR); $HD_IMG_BLUR = 10041;
+use vars qw($GS_HD_IMG_BLUR); $GS_HD_IMG_BLUR = 10042;
+use vars qw($HD_IMG_INTERLACE); $HD_IMG_INTERLACE = 10043;
+use vars qw($GS_HD_IMG_INTERLACE); $GS_HD_IMG_INTERLACE = 10044;
+use vars qw($GS_THUMBNAIL_SHAPE); $GS_THUMBNAIL_SHAPE = 10045;
+
+sub GS_photo_preparation {
+    my( $parent ) = $_[0];
+    my( $topsizer ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    my( $sb ) = Wx::StaticBox->new( $parent, -1, "" );
+    my( $sb_th ) = Wx::StaticBoxSizer->new( $sb, wxVERTICAL );
+    $parent->{sb_thumbnail} = $sb_th;
+    
+    my( $stxt_th ) = Wx::StaticText->new( $parent, $main::GS_THUMBNAIL, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $sb_th->AddWindow( $stxt_th, 0, wxALL, 5 );
+
+    my( $bh_th ) = Wx::BoxSizer->new( wxHORIZONTAL );
+    
+    my( $ch_th ) = Wx::Choice->new( $parent, $main::GS_THUMBNAIL_SHAPE, wxDefaultPosition, [250,-1], [], 0 );
+    $bh_th->AddWindow( $ch_th, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
+
+
+    my( $cp_th_option ) = Wx::CollapsiblePane->new( $parent, $main::CPANE_THUMBNAIL, "Options", wxDefaultPosition, [300,-1], 0|wxCP_DEFAULT_STYLE );
+    my( $oldparent ) = $parent;
+    $parent = $cp_th_option->GetPane();
+    
+    my( $item5 ) = Wx::FlexGridSizer->new( 0, 2, 0, 0 );
+    
+    my( $item6 ) = Wx::StaticText->new( $parent, $main::THUMBNAIL_SIZE, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item5->AddWindow( $item6, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item7 ) = Wx::TextCtrl->new( $parent, $main::GS_THUMBNAIL_SIZE, "", wxDefaultPosition, [80,-1], 0 );
+    $item5->AddWindow( $item7, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    my( $item8 ) = Wx::StaticText->new( $parent, $main::THUMBNAIL_JPEG_QUALITY, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item5->AddWindow( $item8, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item9 ) = Wx::TextCtrl->new( $parent, $main::GS_THUMBNAIL_JPEG_QUALITY, "", wxDefaultPosition, [80,-1], 0 );
+    $item5->AddWindow( $item9, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    $parent->SetSizer( $item5 );
+    $parent = $oldparent;
+    
+    #$sbsizer->AddWindow( $cp_th_options, 0, wxALL, 5 );
+    $sb_th->Add( $bh_th, 0, wxALIGN_CENTER_VERTICAL, 5 );
+    $bh_th->AddWindow( $cp_th_option, 0, wxALL, 5 );
+
+    $topsizer->Add( $sb_th, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item11 ) = Wx::StaticBox->new( $parent, -1, "" );
+    my( $sb_web ) = Wx::StaticBoxSizer->new( $item11, wxVERTICAL );
+    $parent->{sb_web_sized_photo} = $sb_web;
+    
+    my( $stxt_web ) = Wx::StaticText->new( $parent, $main::GS_SITE_IMG, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $sb_web->AddWindow( $stxt_web, 0, wxALIGN_LEFT|wxALIGN_TOP|wxALL, 5 );
+
+    my( $bh_web ) = Wx::BoxSizer->new( wxHORIZONTAL );
+    
+    my( $ch_web ) = Wx::Choice->new( $parent, $main::GS_CREATE_RESIZED, wxDefaultPosition, [250,-1], [], 0 );
+    $bh_web->AddWindow( $ch_web, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
+
+    my( $cp_web_option ) = Wx::CollapsiblePane->new( $parent, $main::CPANE_RESIZE, "Options", wxDefaultPosition, wxDefaultSize, 0|wxCP_DEFAULT_STYLE );
+    my( $oldparent ) = $parent;
+    $parent = $cp_web_option->GetPane();
+    
+    my( $item16 ) = Wx::FlexGridSizer->new( 0, 2, 0, 0 );
+    
+    my( $item17 ) = Wx::StaticText->new( $parent, $main::SITE_IMG_WIDTH, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item16->AddWindow( $item17, 0, wxALL, 5 );
+
+    my( $item18 ) = Wx::TextCtrl->new( $parent, $main::GS_SITE_IMG_WIDTH, "", wxDefaultPosition, wxDefaultSize, 0 );
+    $item16->AddWindow( $item18, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item19 ) = Wx::StaticText->new( $parent, $main::SITE_IMG_HEIGHT, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item16->AddWindow( $item19, 0, wxALL, 5 );
+
+    my( $item20 ) = Wx::TextCtrl->new( $parent, $main::GS_SITE_IMG_HEIGHT, "", wxDefaultPosition, wxDefaultSize, 0 );
+    $item16->AddWindow( $item20, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item21 ) = Wx::StaticText->new( $parent, $main::SITE_IMG_JPEG_QUALITY, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item16->AddWindow( $item21, 0, wxALL, 5 );
+
+    my( $item22 ) = Wx::TextCtrl->new( $parent, $main::GS_SITE_IMG_JPEG_QUALITY, "", wxDefaultPosition, wxDefaultSize, 0 );
+    $item16->AddWindow( $item22, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    $parent->SetSizer( $item16 );
+    $parent = $oldparent;
+    
+    $bh_web->AddWindow( $cp_web_option, 0, wxALL, 5 );
+
+    my( $cp_web_adv ) = Wx::CollapsiblePane->new( $parent, $main::CPANE_RESIZE_ADVANCED, "Advanced", wxDefaultPosition, wxDefaultSize, 0|wxCP_DEFAULT_STYLE );
+    my( $oldparent ) = $parent;
+    $parent = $cp_web_adv->GetPane();
+    
+    my( $item24 ) = Wx::FlexGridSizer->new( 0, 2, 0, 0 );
+    
+    my( $item25 ) = Wx::StaticText->new( $parent, $main::SITE_IMG_FILTER, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item24->AddWindow( $item25, 0, wxALL, 5 );
+
+    my( $item26 ) = Wx::Choice->new( $parent, $main::GS_SITE_IMG_FILTER, wxDefaultPosition, [100,-1], [], 0 );
+    $item24->AddWindow( $item26, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    my( $item27 ) = Wx::StaticText->new( $parent, $main::SITE_IMG_BLUR, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item24->AddWindow( $item27, 0, wxALL, 5 );
+
+    my( $item28 ) = Wx::TextCtrl->new( $parent, $main::GS_SITE_IMG_BLUR, "", wxDefaultPosition, wxDefaultSize, 0 );
+    $item24->AddWindow( $item28, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item29 ) = Wx::StaticText->new( $parent, $main::SITE_IMG_INTERLACE, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item24->AddWindow( $item29, 0, wxALL, 5 );
+
+    my( $item30 ) = Wx::Choice->new( $parent, $main::GS_SITE_IMG_INTERLACE, wxDefaultPosition, [100,-1], [], 0 );
+    $item24->AddWindow( $item30, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    $parent->SetSizer( $item24 );
+    $parent = $oldparent;
+    
+    $bh_web->AddWindow( $cp_web_adv, 0, wxALL, 5 );
+
+    $sb_web->Add( $bh_web, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+    $topsizer->Add( $sb_web, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item32 ) = Wx::StaticBox->new( $parent, -1, "" );
+    my( $item31 ) = Wx::StaticBoxSizer->new( $item32, wxVERTICAL );
+    
+    my( $item33 ) = Wx::StaticText->new( $parent, $main::GS_HD, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item31->AddWindow( $item33, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item34 ) = Wx::BoxSizer->new( wxHORIZONTAL );
+    $parent->{sb_high_definition_photo} = $item34;
+    
+    my( $item35 ) = Wx::Choice->new( $parent, $main::GS_HD_UPLOAD, wxDefaultPosition, [250,-1], [], 0 );
+    $item34->AddWindow( $item35, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
+
+    my( $item36 ) = Wx::CollapsiblePane->new( $parent, $main::CPANE_HD, "Options", wxDefaultPosition, wxDefaultSize, 0|wxCP_DEFAULT_STYLE );
+    my( $oldparent ) = $parent;
+    $parent = $item36->GetPane();
+    
+    my( $item37 ) = Wx::FlexGridSizer->new( 0, 2, 0, 0 );
+    
+    my( $item38 ) = Wx::StaticText->new( $parent, $main::HD_IMG_WIDTH, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item37->AddWindow( $item38, 0, wxALL, 5 );
+
+    my( $item39 ) = Wx::TextCtrl->new( $parent, $main::GS_HD_IMG_WIDTH, "", wxDefaultPosition, wxDefaultSize, 0 );
+    $item37->AddWindow( $item39, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    my( $item40 ) = Wx::StaticText->new( $parent, $main::HD_IMG_HEIGHT, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item37->AddWindow( $item40, 0, wxALL, 5 );
+
+    my( $item41 ) = Wx::TextCtrl->new( $parent, $main::GS_HD_IMG_HEIGHT, "", wxDefaultPosition, wxDefaultSize, 0 );
+    $item37->AddWindow( $item41, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    my( $item42 ) = Wx::StaticText->new( $parent, $main::HD_IMG_JPEG_QUALITY, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item37->AddWindow( $item42, 0, wxALL, 5 );
+
+    my( $item43 ) = Wx::TextCtrl->new( $parent, $main::GS_HD_IMG_JPEG_QUALITY, "", wxDefaultPosition, wxDefaultSize, 0 );
+    $item37->AddWindow( $item43, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    $parent->SetSizer( $item37 );
+    $parent = $oldparent;
+    
+    $item34->AddWindow( $item36, 0, wxALL, 5 );
+
+    my( $item44 ) = Wx::CollapsiblePane->new( $parent, $main::CPANE_HD_ADVANCED, "Advanced", wxDefaultPosition, wxDefaultSize, 0|wxCP_DEFAULT_STYLE );
+    my( $oldparent ) = $parent;
+    $parent = $item44->GetPane();
+    
+    my( $item45 ) = Wx::FlexGridSizer->new( 0, 2, 0, 0 );
+    
+    my( $item46 ) = Wx::StaticText->new( $parent, $main::HD_IMG_FILTER, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item45->AddWindow( $item46, 0, wxALL, 5 );
+
+    my( $item47 ) = Wx::Choice->new( $parent, $main::GS_HD_IMG_FILTER, wxDefaultPosition, [100,-1], [], 0 );
+    $item45->AddWindow( $item47, 0, wxALL, 5 );
+
+    my( $item48 ) = Wx::StaticText->new( $parent, $main::HD_IMG_BLUR, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item45->AddWindow( $item48, 0, wxALL, 5 );
+
+    my( $item49 ) = Wx::TextCtrl->new( $parent, $main::GS_HD_IMG_BLUR, "", wxDefaultPosition, wxDefaultSize, 0 );
+    $item45->AddWindow( $item49, 0, wxALL, 5 );
+
+    my( $item50 ) = Wx::StaticText->new( $parent, $main::HD_IMG_INTERLACE, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item45->AddWindow( $item50, 0, wxALL, 5 );
+
+    my( $item51 ) = Wx::Choice->new( $parent, $main::GS_HD_IMG_INTERLACE, wxDefaultPosition, [100,-1], [], 0 );
+    $item45->AddWindow( $item51, 0, wxALL, 5 );
+
+    $parent->SetSizer( $item45 );
+    $parent = $oldparent;
+    
+    $item34->AddWindow( $item44, 0, wxALL, 5 );
+
+    $item31->Add( $item34, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+    $topsizer->Add( $item31, 0, wxALIGN_LEFT|wxALL, 5 );
+
+    my( $set_size ) = @_ >= 3 ? $_[2] : 1;
+    my( $call_fit ) = @_ >= 2 ? $_[1] : 1;
+    if( $set_size == 1 ) {
+         $_[0]->SetSizer( $topsizer );
+         
+         if( $call_fit == 1 ) {
+             $topsizer->SetSizeHints( $_[0] );
+         }
+    }
+    
+    $topsizer;
+}
+
+use vars qw($GS_WMARK_ACTIVATE); $GS_WMARK_ACTIVATE = 10046;
+use vars qw($GS_WMARK_ACTIVATE_HD); $GS_WMARK_ACTIVATE_HD = 10047;
+use vars qw($CPANE_WATERMARK); $CPANE_WATERMARK = 10048;
+use vars qw($WMARK_TEXT); $WMARK_TEXT = 10049;
+use vars qw($GS_WMARK_TEXT); $GS_WMARK_TEXT = 10050;
+use vars qw($WMARK_TEXT_SIZE); $WMARK_TEXT_SIZE = 10051;
+use vars qw($GS_WMARK_TEXT_SIZE); $GS_WMARK_TEXT_SIZE = 10052;
+use vars qw($WMARK_COLOR); $WMARK_COLOR = 10053;
+use vars qw($GS_WMARK_COLOR); $GS_WMARK_COLOR = 10054;
+use vars qw($WMARK_POSITION); $WMARK_POSITION = 10055;
+use vars qw($GS_WMARK_POSITION); $GS_WMARK_POSITION = 10056;
+use vars qw($WMARK_MARGIN_TOP); $WMARK_MARGIN_TOP = 10057;
+use vars qw($GS_WMARK_MARGIN_TOP); $GS_WMARK_MARGIN_TOP = 10058;
+use vars qw($WMARK_MARGIN_LEFT); $WMARK_MARGIN_LEFT = 10059;
+use vars qw($GS_WMARK_MARGIN_LEFT); $GS_WMARK_MARGIN_LEFT = 10060;
+
+sub GS_photo_watermark {
+    my( $parent ) = $_[0];
+    my( $item0 ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    my( $item2 ) = Wx::StaticBox->new( $parent, -1, "" );
+    my( $item1 ) = Wx::StaticBoxSizer->new( $item2, wxHORIZONTAL );
+    $parent->{sb_watermark} = $item1;
+    
+    my( $item3 ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    my( $item4 ) = Wx::CheckBox->new( $parent, $main::GS_WMARK_ACTIVATE, "", wxDefaultPosition, wxDefaultSize, 0 );
+    $item3->AddWindow( $item4, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item5 ) = Wx::CheckBox->new( $parent, $main::GS_WMARK_ACTIVATE_HD, "", wxDefaultPosition, wxDefaultSize, 0 );
+    $item3->AddWindow( $item5, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    $item1->Add( $item3, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
+
+    my( $item6 ) = Wx::CollapsiblePane->new( $parent, $main::CPANE_WATERMARK, "Options", wxDefaultPosition, wxDefaultSize, 0|wxCP_DEFAULT_STYLE );
+    my( $oldparent ) = $parent;
+    $parent = $item6->GetPane();
+    
+    my( $item7 ) = Wx::FlexGridSizer->new( 0, 2, 0, 0 );
+    
+    my( $item8 ) = Wx::StaticText->new( $parent, $main::WMARK_TEXT, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item7->AddWindow( $item8, 0, wxALL, 5 );
+
+    my( $item9 ) = Wx::TextCtrl->new( $parent, $main::GS_WMARK_TEXT, "", wxDefaultPosition, [200,-1], 0 );
+    $item7->AddWindow( $item9, 0, wxALL, 5 );
+
+    my( $item10 ) = Wx::StaticText->new( $parent, $main::WMARK_TEXT_SIZE, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item7->AddWindow( $item10, 0, wxALL, 5 );
+
+    my( $item11 ) = Wx::SpinCtrl->new( $parent, $main::GS_WMARK_TEXT_SIZE, "0", wxDefaultPosition, [50,-1], 0, 0, 100, 0 );
+    $item7->AddWindow( $item11, 0, wxALL, 5 );
+
+    my( $item12 ) = Wx::StaticText->new( $parent, $main::WMARK_COLOR, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item7->AddWindow( $item12, 0, wxALL, 5 );
+
+    my( $item13 ) = Wx::Choice->new( $parent, $main::GS_WMARK_COLOR, wxDefaultPosition, [100,-1], [], 0 );
+    $item7->AddWindow( $item13, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item14 ) = Wx::StaticText->new( $parent, $main::WMARK_POSITION, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item7->AddWindow( $item14, 0, wxALL, 5 );
+
+    my( $item15 ) = Wx::Choice->new( $parent, $main::GS_WMARK_POSITION, wxDefaultPosition, [100,-1], [], 0 );
+    $item7->AddWindow( $item15, 0, wxALL, 5 );
+
+    my( $item16 ) = Wx::StaticText->new( $parent, $main::WMARK_MARGIN_TOP, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item7->AddWindow( $item16, 0, wxALL, 5 );
+
+    my( $item17 ) = Wx::SpinCtrl->new( $parent, $main::GS_WMARK_MARGIN_TOP, "0", wxDefaultPosition, [100,-1], 0, 0, 100, 0 );
+    $item7->AddWindow( $item17, 0, wxALL, 5 );
+
+    my( $item18 ) = Wx::StaticText->new( $parent, $main::WMARK_MARGIN_LEFT, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item7->AddWindow( $item18, 0, wxALL, 5 );
+
+    my( $item19 ) = Wx::SpinCtrl->new( $parent, $main::GS_WMARK_MARGIN_LEFT, "0", wxDefaultPosition, [100,-1], 0, 0, 100, 0 );
+    $item7->AddWindow( $item19, 0, wxALL, 5 );
+
+    $parent->SetSizer( $item7 );
+    $parent = $oldparent;
+    
+    $item1->AddWindow( $item6, 0, wxALL, 5 );
+
+    $item0->Add( $item1, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+    my( $set_size ) = @_ >= 3 ? $_[2] : 1;
+    my( $call_fit ) = @_ >= 2 ? $_[1] : 1;
+    if( $set_size == 1 ) {
+         $_[0]->SetSizer( $item0 );
+         
+         if( $call_fit == 1 ) {
+             $item0->SetSizeHints( $_[0] );
+         }
+    }
+    
+    $item0;
+}
+
+use vars qw($GS_REMOVE_UPLOADED_FROM_SELECTION); $GS_REMOVE_UPLOADED_FROM_SELECTION = 10070;
+use vars qw($CPANE_TRANSFERT_ADVANCED); $CPANE_TRANSFERT_ADVANCED = 10071;
+use vars qw($CHUNK_SIZE); $CHUNK_SIZE = 10072;
+use vars qw($GS_CHUNK_SIZE); $GS_CHUNK_SIZE = 10073;
+
+sub GS_photo_transfer {
+    my( $parent ) = $_[0];
+    my( $item0 ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    my( $item2 ) = Wx::StaticBox->new( $parent, -1, "" );
+    my( $item1 ) = Wx::StaticBoxSizer->new( $item2, wxHORIZONTAL );
+    $parent->{sb_transfert} = $item1;
+    
+    my( $item3 ) = Wx::CheckBox->new( $parent, $main::GS_REMOVE_UPLOADED_FROM_SELECTION, "", wxDefaultPosition, wxDefaultSize, 0 );
+    $item1->AddWindow( $item3, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    my( $item4 ) = Wx::CollapsiblePane->new( $parent, $main::CPANE_TRANSFERT_ADVANCED, "Options", wxDefaultPosition, wxDefaultSize, 0|wxCP_DEFAULT_STYLE );
+    my( $oldparent ) = $parent;
+    $parent = $item4->GetPane();
+    
+    my( $item5 ) = Wx::FlexGridSizer->new( 0, 2, 0, 0 );
+    
+    my( $item6 ) = Wx::StaticText->new( $parent, $main::CHUNK_SIZE, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item5->AddWindow( $item6, 0, wxALL, 5 );
+
+    my( $item7 ) = Wx::TextCtrl->new( $parent, $main::GS_CHUNK_SIZE, "", wxDefaultPosition, wxDefaultSize, 0 );
+    $item5->AddWindow( $item7, 0, wxALL, 5 );
+
+    $parent->SetSizer( $item5 );
+    $parent = $oldparent;
+    
+    $item1->AddWindow( $item4, 0, wxALL, 5 );
+
+    $item0->Add( $item1, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $set_size ) = @_ >= 3 ? $_[2] : 1;
+    my( $call_fit ) = @_ >= 2 ? $_[1] : 1;
+    if( $set_size == 1 ) {
+         $_[0]->SetSizer( $item0 );
+         
+         if( $call_fit == 1 ) {
+             $item0->SetSizeHints( $_[0] );
+         }
+    }
+    
+    $item0;
+}
+
+
+use vars qw($LANGUAGE); $LANGUAGE = 10064;
+use vars qw($GS_LANGUAGE); $GS_LANGUAGE = 10065;
+
+sub GS_language {
+    my( $parent ) = $_[0];
+    my( $item0 ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    my( $item2 ) = Wx::StaticBox->new( $parent, -1, "" );
+    my( $item1 ) = Wx::StaticBoxSizer->new( $item2, wxVERTICAL );
+    $parent->{sb_language} = $item1;
+    
+    my( $item5 ) = Wx::StaticText->new( $parent, $main::LANGUAGE, "", wxDefaultPosition, wxDefaultSize, wxST_NO_AUTORESIZE );
+    $item1->AddWindow( $item5, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+    my( $item6 ) = Wx::Choice->new( $parent, $main::GS_LANGUAGE, wxDefaultPosition, [200,-1], [], 0 );
+    $item1->AddWindow( $item6, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    $item0->Add( $item1, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    $_[0]->SetSizer( $item0 );
+    $item0->SetSizeHints( $_[0] );
+    
+    $item0;
+}
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/Login.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/Login.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/Login.pm	(revision 6108)
@@ -0,0 +1,82 @@
+use Wx;
+use strict;
+
+use Wx qw( wxDefaultSize wxDefaultPosition wxNullAnimation wxNullFont wxBLACK );
+use Wx qw( wxID_OK wxID_APPLY wxID_SAVE wxID_SAVEAS wxID_CANCEL wxID_YES wxID_NO wxID_EXIT wxID_ABOUT wxID_HELP );
+use Wx qw( wxVERTICAL wxHORIZONTAL wxALL wxLEFT wxRIGHT wxTOP wxBOTTOM wxCENTRE wxGROW );
+use Wx qw( wxALIGN_RIGHT wxALIGN_BOTTOM wxALIGN_CENTER wxALIGN_CENTER_VERTICAL wxALIGN_CENTER_HORIZONTAL );
+use Wx qw( wxTE_PASSWORD );
+use Wx::Locale;
+
+# Bitmap functions
+
+use Wx qw( wxNullBitmap wxBITMAP_TYPE_PNG );
+
+# Window functions
+
+use vars qw($ID_TEXT); $ID_TEXT = 10000;
+use vars qw($ID_PWG_URL); $ID_PWG_URL = 10001;
+use vars qw($ID_PWG_USERNAME); $ID_PWG_USERNAME = 10002;
+use vars qw($ID_PWG_PASSWORD); $ID_PWG_PASSWORD = 10003;
+use vars qw($ID_PWG_OK); $ID_PWG_OK = 10004;
+use vars qw($ID_PWG_OFFLINE); $ID_PWG_OFFLINE = 10005;
+use vars qw($ID_PWG_CANCEL); $ID_PWG_CANCEL = 10006;
+
+sub Login {
+    my( $parent ) = $_[0];
+    my( $item0 ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    $item0->AddSpace( 20, 20, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    my( $item2 ) = Wx::StaticBox->new( $parent, -1, "" );
+    my( $item1 ) = Wx::StaticBoxSizer->new( $item2, wxVERTICAL );
+    
+    my( $item3 ) = Wx::FlexGridSizer->new( 0, 2, 0, 0 );
+    
+    my( $item4 ) = Wx::StaticText->new( $parent, $main::ID_TEXT, gettext("Piwigo url"), wxDefaultPosition, wxDefaultSize, 0 );
+    $item3->AddWindow( $item4, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item5 ) = Wx::TextCtrl->new( $parent, $main::ID_PWG_URL, "", wxDefaultPosition, [400,-1], 0 );
+    $item3->AddWindow( $item5, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item6 ) = Wx::StaticText->new( $parent, $main::ID_TEXT, gettext("Admin. username :"), wxDefaultPosition, wxDefaultSize, 0 );
+    $item3->AddWindow( $item6, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item7 ) = Wx::TextCtrl->new( $parent, $main::ID_PWG_USERNAME, "", wxDefaultPosition, [200,-1], 0 );
+    $item3->AddWindow( $item7, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item8 ) = Wx::StaticText->new( $parent, $main::ID_TEXT, gettext("Admin. password :"), wxDefaultPosition, wxDefaultSize, 0 );
+    $item3->AddWindow( $item8, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item9 ) = Wx::TextCtrl->new( $parent, $main::ID_PWG_PASSWORD, "", wxDefaultPosition, [200,-1], wxTE_PASSWORD );
+    $item3->AddWindow( $item9, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    $item1->Add( $item3, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    $item0->Add( $item1, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    $item0->AddSpace( 20, 20, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    my( $item10 ) = Wx::BoxSizer->new( wxHORIZONTAL );
+    
+    my( $item11 ) = Wx::Button->new( $parent, $main::ID_PWG_OK, gettext("Connect"), wxDefaultPosition, wxDefaultSize, 0 );
+    $item11->SetDefault();
+    $item10->AddWindow( $item11, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    my( $item12 ) = Wx::Button->new( $parent, $main::ID_PWG_OFFLINE, gettext("Work Offline"), wxDefaultPosition, wxDefaultSize, 0 );
+    $item10->AddWindow( $item12, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    my( $item13 ) = Wx::Button->new( $parent, $main::ID_PWG_CANCEL, gettext("Exit"), wxDefaultPosition, wxDefaultSize, 0 );
+    $item10->AddWindow( $item13, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    $item0->Add( $item10, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    $_[0]->SetSizer( $item0 );
+         
+    $item0->SetSizeHints( $_[0] );
+    
+    $item0;
+}
+
+use Wx qw( wxITEM_NORMAL wxITEM_RADIO wxITEM_CHECK );
+
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/PhotoProperties.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/PhotoProperties.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/PhotoProperties.pm	(revision 6108)
@@ -0,0 +1,122 @@
+#-----------------------------------------------------------------------------
+# Perl source generated by wxDesigner from file: photo_properties.wdr
+# Do not modify this file, all changes will be lost!
+#-----------------------------------------------------------------------------
+
+use Wx;
+use Wx::Calendar;
+use Wx::DateTime;
+use strict;
+
+# Custom source
+use Uploader::GUI::wxChoiceFilteredPanel;
+
+use Wx qw( wxDefaultSize wxDefaultPosition wxNullAnimation wxNullFont wxBLACK );
+use Wx qw( wxID_OK wxID_APPLY wxID_SAVE wxID_SAVEAS wxID_CANCEL wxID_YES wxID_NO wxID_EXIT wxID_ABOUT wxID_HELP );
+use Wx qw( wxVERTICAL wxHORIZONTAL wxALL wxLEFT wxRIGHT wxTOP wxBOTTOM wxCENTRE wxGROW );
+use Wx qw( wxALIGN_RIGHT wxALIGN_BOTTOM wxALIGN_CENTER wxALIGN_CENTER_VERTICAL wxALIGN_CENTER_HORIZONTAL );
+use Wx qw( wxTE_MULTILINE wxDP_DROPDOWN wxDP_ALLOWNONE);
+
+# Bitmap functions
+
+use Wx qw( wxNullBitmap wxBITMAP_TYPE_PNG );
+
+# Window functions
+
+use vars qw($CAPTION); $CAPTION = 10000;
+use vars qw($PHOTO_PROPERTIES_CAPTION); $PHOTO_PROPERTIES_CAPTION = 10001;
+use vars qw($AUTHOR); $AUTHOR = 10002;
+use vars qw($PHOTO_PROPERTIES_AUTHOR); $PHOTO_PROPERTIES_AUTHOR = 10003;
+use vars qw($COMMENT); $COMMENT = 10004;
+use vars qw($PHOTO_PROPERTIES_COMMENT); $PHOTO_PROPERTIES_COMMENT = 10005;
+use vars qw($CREATE_DATE); $CREATE_DATE = 10006;
+use vars qw($PHOTO_PROPERTIES_CREATE_DATE); $PHOTO_PROPERTIES_CREATE_DATE = 10007;
+use vars qw($TAGS); $TAGS = 10008;
+use vars qw($PHOTO_PROPERTIES_TAG); $PHOTO_PROPERTIES_TAG = 10009;
+use vars qw($PRIVACY_LEVEL); $PRIVACY_LEVEL = 10010;
+use vars qw($PHOTO_PROPERTIES_PRIVACY_LEVEL); $PHOTO_PROPERTIES_PRIVACY_LEVEL = 10011;
+
+sub PhotoProperties {
+    my( $parent ) = $_[0];
+    my( $item0 ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    my( $item1 ) = Wx::BoxSizer->new( wxHORIZONTAL );
+    
+    my( $item2 ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    my( $item3 ) = Wx::StaticText->new( $parent, $main::CAPTION, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item2->AddWindow( $item3, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
+
+    my( $item4 ) = Wx::TextCtrl->new( $parent, $main::PHOTO_PROPERTIES_CAPTION, "", wxDefaultPosition, [200,-1], 0 );
+    $item2->AddWindow( $item4, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+    my( $item5 ) = Wx::StaticText->new( $parent, $main::AUTHOR, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item2->AddWindow( $item5, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
+
+    my( $item6 ) = Wx::TextCtrl->new( $parent, $main::PHOTO_PROPERTIES_AUTHOR, "", wxDefaultPosition, [200,-1], 0 );
+    $item2->AddWindow( $item6, 0, wxALIGN_CENTER, 5 );
+
+    my( $item7 ) = Wx::StaticText->new( $parent, $main::COMMENT, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item2->AddWindow( $item7, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
+
+    my( $item8 ) = Wx::TextCtrl->new( $parent, $main::PHOTO_PROPERTIES_COMMENT, "", wxDefaultPosition, [200,100], wxTE_MULTILINE );
+    $item2->AddWindow( $item8, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
+
+    my( $item9 ) = Wx::StaticText->new( $parent, $main::CREATE_DATE, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item2->AddWindow( $item9, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
+
+    my( $item10 ) = Wx::DatePickerCtrl->new( $parent, $main::PHOTO_PROPERTIES_CREATE_DATE, Wx::DateTime->new(), wxDefaultPosition, [200,-1], wxDP_ALLOWNONE );
+    $item2->AddWindow( $item10, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+    $item1->Add( $item2, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
+
+    my( $item11 ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    my( $item12 ) = Wx::StaticText->new( $parent, $main::TAGS, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item11->AddWindow( $item12, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
+
+    my $tags = $_[1];
+    $tags->{parentwnd}=$parent;
+    my( $item13 ) = Uploader::GUI::wxChoiceFilteredPanel->new($tags);
+    $item11->AddWindow( $item13, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+    $item1->Add( $item11, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 0 );
+
+    $item0->Add( $item1, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item14 ) = Wx::BoxSizer->new( wxHORIZONTAL );
+    
+    my( $item15 ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    my( $item16 ) = Wx::StaticText->new( $parent, $main::PRIVACY_LEVEL, "text", wxDefaultPosition, wxDefaultSize, 0 );
+    $item15->AddWindow( $item16, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
+
+    my( $item17 ) = Wx::Choice->new( $parent, $main::PHOTO_PROPERTIES_PRIVACY_LEVEL, wxDefaultPosition, [520,-1], [], 0 );
+    $item15->AddWindow( $item17, 0, wxALIGN_CENTER_VERTICAL, 5 );
+
+    $item14->Add( $item15, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
+
+    $item0->Add( $item14, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $set_size ) = @_ >= 3 ? $_[2] : 1;
+    my( $call_fit ) = @_ >= 2 ? $_[1] : 1;
+    if( $set_size == 1 ) {
+         $_[0]->SetSizer( $item0 );
+         
+         if( $call_fit == 1 ) {
+             $item0->SetSizeHints( $_[0] );
+         }
+    }
+    
+    $item0;
+}
+
+# Menu bar functions
+
+
+# Toolbar functions
+
+use Wx qw( wxITEM_NORMAL wxITEM_RADIO wxITEM_CHECK );
+
+
+# End of generated file
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/PhotoPropertiesCategoriesTags.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/PhotoPropertiesCategoriesTags.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/PhotoPropertiesCategoriesTags.pm	(revision 6108)
@@ -0,0 +1,415 @@
+use Wx qw/wxFONTFAMILY_SWISS wxFONTSTYLE_NORMAL wxFONTWEIGHT_NORMAL wxFONTWEIGHT_BOLD  wxGREEN /;
+use Wx::Calendar;
+use Wx::DateTime;
+use strict;
+use Data::Dumper;
+# Custom source
+use Uploader::GUI::wxChoiceFilteredPanel;
+
+use Wx qw( wxDefaultSize wxDefaultPosition wxNullAnimation wxNullFont wxBLACK );
+use Wx qw( wxID_OK wxID_APPLY wxID_SAVE wxID_SAVEAS wxID_CANCEL wxID_YES wxID_NO wxID_EXIT wxID_ABOUT wxID_HELP );
+use Wx qw( wxVERTICAL wxHORIZONTAL wxALL wxLEFT wxRIGHT wxTOP wxBOTTOM wxCENTRE wxGROW wxEXPAND);
+use Wx qw( wxALIGN_RIGHT wxALIGN_BOTTOM wxALIGN_CENTER wxALIGN_CENTER_VERTICAL wxALIGN_CENTER_HORIZONTAL );
+use Wx qw( wxTR_HAS_BUTTONS wxTR_LINES_AT_ROOT wxSUNKEN_BORDER wxLI_HORIZONTAL wxTE_MULTILINE );
+use Wx qw( wxDP_DROPDOWN wxCB_READONLY);
+
+# Bitmap functions
+
+use Wx qw( wxNullBitmap wxBITMAP_TYPE_PNG );
+
+# Window functions
+
+use vars qw($PHOTO_PROPERTIES_NB); $PHOTO_PROPERTIES_NB = 10000;
+use vars qw($PHOTO_PROPERTIES_CATEGORIES); $PHOTO_PROPERTIES_CATEGORIES = 10001;
+use vars qw($ID_LINE); $ID_LINE = 10002;
+use vars qw($PHOTO_PROPERTIES_UPLOAD); $PHOTO_PROPERTIES_UPLOAD = 10003;
+
+sub PhotoPropertiesCategoriesTags {
+    my( $parent, $categories ) = @_;
+
+
+    my( $topsizer ) = Wx::BoxSizer->new( wxVERTICAL );
+
+    $parent->{_multi_selection_mode_panel} = Wx::Panel->new(
+        $parent,
+        -1,
+        wxDefaultPosition,
+        [450, -1]
+    );
+
+    _multi_selection_mode_panel_layout(
+        $parent->{_multi_selection_mode_panel}
+    );
+
+    $parent->{_multi_selection_mode_panel}->Show(0);
+
+    $topsizer->Add(
+        $parent->{_multi_selection_mode_panel},
+        0,
+        wxEXPAND|wxLEFT|wxRIGHT,
+        5
+    );
+
+
+    # defines minimum size
+    my( $item2 ) = Wx::Notebook->new( $parent, $main::PHOTO_PROPERTIES_NB, wxDefaultPosition, [450,-1], 0 );
+    my( $item1 ) = $item2;
+    if( Wx->VERSION < 0.21 ) {
+        $item1 = Wx::NotebookSizer->new( $item2 );
+    }
+    $parent->{_properties_notebook} = $item2;
+    
+    # the notebook has adaptive size : stretch factor 2, wxEXPAND
+    $topsizer->Add( $item1, 2, wxEXPAND|wxALL, 5 );
+
+    # the notebook has adaptive size : stretch factor 1, wxEXPAND
+    my ( $tree_categories ) = Uploader::GUI::wxCategoryTreeCtrl->new(
+        {
+            parentwnd  => $parent,
+            id         => $main::PHOTO_PROPERTIES_CATEGORIES,
+            categories => $categories,
+        }
+    );
+    $tree_categories->Populate;
+    my( $cat_sizer ) = Wx::BoxSizer->new( wxHORIZONTAL );
+    $cat_sizer->Add( $tree_categories, 1, wxEXPAND|wxALL, 5 );
+
+    $topsizer->Add( $cat_sizer, 1, wxEXPAND|wxALL, 5 );
+
+    my( $item4 ) = Wx::StaticLine->new( $parent, $main::ID_LINE, wxDefaultPosition, [20,-1], wxLI_HORIZONTAL );
+    $topsizer->AddWindow( $item4, 0, wxEXPAND|wxALL, 5 );
+
+    my( $item5 ) = Wx::Button->new( $parent, $main::PHOTO_PROPERTIES_UPLOAD, "", wxDefaultPosition, [-1,40], 0 );
+    my $btfont = Wx::Font->new(16, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD );
+    $item5->SetFont($btfont);
+    $item5->SetForegroundColour( Wx::Colour->new(255, 51, 99) );
+    $topsizer->AddWindow( $item5, 0, wxEXPAND|wxALL, 5 );
+
+    $parent->SetSizer( $topsizer );
+    $topsizer->Fit( $parent );
+
+    $topsizer;
+}
+use vars qw($TAGS); $TAGS = 10004;
+use vars qw($PHOTO_PROPERTIES_TAG); $PHOTO_PROPERTIES_TAG = 10005;
+
+sub photo_properties_tags {
+    my( $parent, $tags ) = @_;
+    my( $topsizer ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    $tags->{parentwnd}=$parent;
+    my( $panel ) = Uploader::GUI::wxChoiceFilteredPanel->new($tags);
+    # the panel has adaptive size : stretch factor 1, wxEXPAND
+    $topsizer->AddWindow( $panel, 1, wxEXPAND|wxALL, 5 );
+
+    $parent->SetSizer( $topsizer );
+    $topsizer->Fit( $parent );
+    
+    $topsizer;
+}
+
+use vars qw($CAPTION); $CAPTION = 10006;
+use vars qw($PHOTO_PROPERTIES_CAPTION); $PHOTO_PROPERTIES_CAPTION = 10007;
+use vars qw($AUTHOR); $AUTHOR = 10008;
+use vars qw($PHOTO_PROPERTIES_AUTHOR); $PHOTO_PROPERTIES_AUTHOR = 10009;
+use vars qw($COMMENT); $COMMENT = 10010;
+use vars qw($PHOTO_PROPERTIES_COMMENT); $PHOTO_PROPERTIES_COMMENT = 10011;
+use vars qw($CREATE_DATE); $CREATE_DATE = 10012;
+use vars qw($PHOTO_PROPERTIES_CREATE_DATE); $PHOTO_PROPERTIES_CREATE_DATE = 10013;
+use vars qw($PRIVACY_LEVEL); $PRIVACY_LEVEL = 10014;
+use vars qw($PHOTO_PROPERTIES_PRIVACY_LEVEL); $PHOTO_PROPERTIES_PRIVACY_LEVEL = 10015;
+
+
+sub photo_properties_caption_comments {
+    my( $parent ) = @_;
+
+    my $topsizer = Wx::BoxSizer->new( wxVERTICAL );
+
+    $topsizer->Add(
+        ComboField(
+            $parent,
+            $main::CAPTION,
+            $main::PHOTO_PROPERTIES_CAPTION
+        ),
+        0,
+        wxEXPAND|wxALL,
+        2
+    );
+
+    my $sizer_comment = Wx::BoxSizer->new( wxHORIZONTAL );
+    $sizer_comment->Add( 
+        TextField(
+            $parent,
+            $main::COMMENT,
+            $main::PHOTO_PROPERTIES_COMMENT,
+            1,
+            wxTE_MULTILINE
+        ),
+        1,
+        wxEXPAND|wxALL,
+        2
+    );
+
+    $topsizer->Add( $sizer_comment, 1, wxEXPAND|wxALL, 2 );
+
+    my $sizer_author_create = Wx::BoxSizer->new( wxVERTICAL );
+    $sizer_author_create->Add( 
+        TextField(
+            $parent,
+            $main::AUTHOR,
+            $main::PHOTO_PROPERTIES_AUTHOR
+        ),
+        1,
+        wxEXPAND|wxALL,
+        2
+    );
+
+    $sizer_author_create->Add( 
+        DatepickerField(
+            $parent,
+            $main::CREATE_DATE,
+            $main::PHOTO_PROPERTIES_CREATE_DATE
+        ),
+        1,
+        wxEXPAND|wxALL,
+        2
+    ); 
+
+    my $sizer_author_create_privacy = Wx::BoxSizer->new( wxHORIZONTAL );
+
+    my $sizer_privacy = Wx::BoxSizer->new( wxHORIZONTAL );
+
+    $sizer_privacy->Add( 
+        ChoiceField(
+            $parent,
+            $main::PRIVACY_LEVEL,
+            $main::PHOTO_PROPERTIES_PRIVACY_LEVEL,
+        ),
+        1,
+        wxALL,
+        2
+    );
+
+    $sizer_author_create_privacy->Add($sizer_author_create, 0, wxEXPAND|wxALL, 0);
+    $sizer_author_create_privacy->Add($sizer_privacy, 1, wxEXPAND|wxALL, 0);
+
+
+    $topsizer->Add( $sizer_author_create_privacy, 0, wxEXPAND|wxALL, 2 );
+
+    $parent->SetSizer( $topsizer );
+    $topsizer->Fit( $parent );
+    
+    $topsizer;
+}
+
+use Wx qw( wxITEM_NORMAL wxITEM_RADIO wxITEM_CHECK );
+
+
+sub TextField {
+    my ( $parent, $id_label, $id_textctrl, $expand, $style ) = @_;
+
+    $expand||=0;
+    $style||0;
+
+    my( $sizer ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    $sizer->Add( 
+        Wx::StaticText->new(
+            $parent,
+            $id_label,
+            "text",
+            wxDefaultPosition,
+            wxDefaultSize,
+            0
+        ),
+        0,
+        wxALL,
+        1 
+    );
+
+    $sizer->Add( 
+        Wx::TextCtrl->new(
+            $parent,
+            $id_textctrl,
+            "",
+            wxDefaultPosition,
+            [-1,-1],
+            $style 
+        ),
+        $expand,
+        wxEXPAND|wxALL,
+        1 
+    );
+
+    $sizer;
+}
+
+sub DatepickerField {
+    my ( $parent, $id_label, $id_ctrl, $expand ) = @_;
+
+    $expand ||=0;
+
+    my( $sizer ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    $sizer->Add( 
+        Wx::StaticText->new(
+            $parent,
+            $id_label,
+            "text",
+            wxDefaultPosition,
+            wxDefaultSize,
+            0
+        ),
+        0,
+        wxALL,
+        1 
+    );
+
+    $sizer->Add(
+        Wx::DatePickerCtrl->new(
+            $parent,
+            $id_ctrl,
+            Wx::DateTime->new(),
+            wxDefaultPosition,
+            [200,-1],
+            wxDP_DROPDOWN
+        ),
+        $expand,
+        wxEXPAND|wxALL,
+        1 
+    );
+
+    $sizer;
+}
+
+sub ChoiceField {
+    my ( $parent, $id_label, $id_ctrl, $expand ) = @_;
+
+    $expand ||=0;
+
+    my( $sizer ) = Wx::BoxSizer->new( wxVERTICAL );
+
+    $expand||=0;
+    
+    $sizer->Add( 
+        Wx::StaticText->new(
+            $parent,
+            $id_label,
+            "text",
+            wxDefaultPosition,
+            wxDefaultSize,
+            0
+        ),
+        0,
+        wxALL,
+        1 
+    );
+
+    $sizer->Add(
+        Wx::Choice->new(
+            $parent,
+            $id_ctrl,
+            wxDefaultPosition,
+            [-1,-1],
+            [],
+            0
+        ),
+        $expand,
+        wxEXPAND|wxALL,
+        1 
+    );
+
+    $sizer;
+}
+
+
+sub ComboField {
+    my ( $parent, $id_label, $id_ctrl, $expand ) = @_;
+
+    $expand ||=0;
+
+    my( $sizer ) = Wx::BoxSizer->new( wxVERTICAL );
+
+    $expand||=0;
+    
+    $sizer->Add( 
+        Wx::StaticText->new(
+            $parent,
+            $id_label,
+            "text",
+            wxDefaultPosition,
+            wxDefaultSize,
+            0
+        ),
+        0,
+        wxALL,
+        1 
+    );
+
+    my $ctrl = Wx::ComboBox->new(
+        $parent,
+        $id_ctrl,
+        "",
+        wxDefaultPosition,
+        [-1,-1],
+        [],
+        
+    );
+
+    # the EVT_COMBOBOX has set _value if we need to overwrite the default
+    # text. The list contains function names. We want to have the value returned by the function
+    # in the text field
+    Wx::Event::EVT_IDLE(
+        $ctrl,
+        sub { 
+            my ( $ctrl, $event ) = @_;
+            if(exists $ctrl->{_value}){
+                $ctrl->SetValue($ctrl->{_value}) if !$ctrl->{_multi_selection_mode};
+                delete $ctrl->{_value};
+                delete $ctrl->{_multi_selection_mode};
+            }
+        } 
+    );
+
+
+    $sizer->Add(
+        $ctrl,
+        $expand,
+        wxEXPAND|wxALL,
+        1 
+    );
+
+
+
+    $sizer;
+}
+
+
+sub _multi_selection_mode_panel_layout{
+    my ( $panel ) = @_;
+
+    my( $item0 ) = Wx::BoxSizer->new( wxVERTICAL );
+
+    my $fb = Wx::Font->new( 10, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD );
+    my $fn = Wx::Font->new( 10, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL );
+
+    $panel->{_text1} = Wx::StaticText->new( $panel, -1, "Text", wxDefaultPosition, wxDefaultSize, 0 );
+    $panel->{_text1}->SetFont($fb);
+    $item0->Add( $panel->{_text1}, 0, wxALIGN_LEFT|wxALL, 1 );
+
+    
+    $panel->{_text2} = Wx::StaticText->new( $panel, -1, "Text", wxDefaultPosition, wxDefaultSize, 0 );
+    $panel->{_text2}->SetFont($fn);
+    $item0->Add( $panel->{_text2}, 0, wxALIGN_LEFT|wxALL, 1 );
+
+    $panel->SetSizer( $item0 );
+    $item0->SetSizeHints( $panel );
+
+}
+
+
+use vars qw($CATEGORIES_ADD); $CATEGORIES_ADD = 10020;
+
+
+1;
+
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/PhotoPropertiesExif.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/PhotoPropertiesExif.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/PhotoPropertiesExif.pm	(revision 6108)
@@ -0,0 +1,38 @@
+use Wx;
+use strict;
+
+use Wx qw( wxDefaultSize wxDefaultPosition wxNullAnimation wxNullFont wxBLACK );
+use Wx qw( wxID_OK wxID_APPLY wxID_SAVE wxID_SAVEAS wxID_CANCEL wxID_YES wxID_NO wxID_EXIT wxID_ABOUT wxID_HELP );
+use Wx qw( wxVERTICAL wxHORIZONTAL wxALL wxLEFT wxRIGHT wxTOP wxBOTTOM wxCENTRE wxGROW );
+use Wx qw( wxALIGN_RIGHT wxALIGN_BOTTOM wxALIGN_CENTER wxALIGN_CENTER_VERTICAL wxALIGN_CENTER_HORIZONTAL );
+use Wx qw( wxLC_REPORT wxSUNKEN_BORDER );
+
+# Bitmap functions
+
+use Wx qw( wxNullBitmap wxBITMAP_TYPE_PNG );
+
+# Window functions
+
+use vars qw($IMG_PROP_EXIF_LIST); $IMG_PROP_EXIF_LIST = 10000;
+use vars qw($IMG_PROP_EXIF_CLOSE); $IMG_PROP_EXIF_CLOSE = 10001;
+
+sub image_prop_exif {
+    my( $parent ) = $_[0];
+    my( $item0 ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    my( $item1 ) = Wx::ListCtrl->new( $parent, $main::IMG_PROP_EXIF_LIST, wxDefaultPosition, [400,200], wxLC_REPORT|wxSUNKEN_BORDER );
+    $item0->AddWindow( $item1, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item2 ) = Wx::Button->new( $parent, $main::IMG_PROP_EXIF_CLOSE, "OK", wxDefaultPosition, wxDefaultSize, 0 );
+    $item0->AddWindow( $item2, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    $_[0]->SetSizer( $item0 );
+    $item0->SetSizeHints( $_[0] );
+    
+    $item0;
+}
+
+
+# Toolbar functions
+
+use Wx qw( wxITEM_NORMAL wxITEM_RADIO wxITEM_CHECK );
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/Progress.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/Progress.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/Progress.pm	(revision 6108)
@@ -0,0 +1,60 @@
+use Wx;
+use strict;
+
+use Wx qw( wxDefaultSize wxDefaultPosition wxID_OK wxID_SAVE wxID_SAVEAS wxID_CANCEL wxID_YES wxID_EXIT wxID_ABOUT wxID_HELP );
+use Wx qw( wxVERTICAL wxHORIZONTAL wxALL wxLEFT wxRIGHT wxTOP wxBOTTOM wxCENTRE wxGROW wxADJUST_MINSIZE );
+use Wx qw( wxALIGN_RIGHT wxALIGN_BOTTOM wxALIGN_CENTER wxALIGN_CENTER_VERTICAL wxALIGN_CENTER_HORIZONTAL );
+use Wx qw( wxLI_HORIZONTAL );
+
+# Bitmap functions
+
+use Wx qw( wxNullBitmap wxBITMAP_TYPE_PNG );
+
+# Window functions
+
+use vars qw($ID_PROGRESS_TXT); $ID_PROGRESS_TXT = 10000;
+use vars qw($ID_STATICBITMAP); $ID_STATICBITMAP = 10001;
+use vars qw($ID_PROGRESS_GAUGE); $ID_PROGRESS_GAUGE = 10002;
+use vars qw($ID_LINE); $ID_LINE = 10003;
+use vars qw($ID_PROGRESS_OK); $ID_PROGRESS_OK = 10004;
+use vars qw($ID_PROGRESS_TXT2); $ID_PROGRESS_TXT2 = 10005;
+
+sub ProcessingProgress {
+    my( $item0 ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    my( $item1 ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    my( $item2 ) = Wx::StaticText->new( $_[0], $main::ID_PROGRESS_TXT, "", wxDefaultPosition, wxDefaultSize, 0 );
+    $item1->AddWindow( $item2, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    $item1->AddSpace( 20, 20, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    my( $item3 ) = Wx::StaticBitmap->new( $_[0], $main::ID_STATICBITMAP, wxNullBitmap, wxDefaultPosition, [100,100] );
+    $item1->AddWindow( $item3, 0, wxALIGN_CENTER_VERTICAL|wxALL, 10 );
+
+    $item1->AddSpace( 20, 30, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    my( $item30 ) = Wx::StaticText->new( $_[0], $main::ID_PROGRESS_TXT2, "", wxDefaultPosition, wxDefaultSize, 0 );
+    $item1->AddWindow( $item30, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item4 ) = Wx::Gauge->new( $_[0], $main::ID_PROGRESS_GAUGE, 100, wxDefaultPosition, [400,12], 0 );
+    $item1->AddWindow( $item4, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 10 );
+
+    $item0->Add( $item1, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    my( $item5 ) = Wx::StaticLine->new( $_[0], $main::ID_LINE, wxDefaultPosition, [20,-1], wxLI_HORIZONTAL );
+    $item0->AddWindow( $item5, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item6 ) = Wx::BoxSizer->new( wxHORIZONTAL );
+    
+    my( $item7 ) = Wx::Button->new( $_[0], $main::ID_PROGRESS_OK, "OK", wxDefaultPosition, wxDefaultSize, 0 );
+    $item6->AddWindow( $item7, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    $item0->Add( $item6, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    $_[0]->SetSizer( $item0 );
+    $item0->SetSizeHints( $_[0] );
+    
+    $item0;
+}
+
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/Reupload.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/Reupload.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/Layout/Reupload.pm	(revision 6108)
@@ -0,0 +1,56 @@
+use Wx;
+use strict;
+
+use Wx qw( wxDefaultSize wxDefaultPosition wxNullAnimation wxNullFont wxBLACK );
+use Wx qw( wxID_OK wxID_APPLY wxID_SAVE wxID_SAVEAS wxID_CANCEL wxID_YES wxID_NO wxID_EXIT wxID_ABOUT wxID_HELP );
+use Wx qw( wxVERTICAL wxHORIZONTAL wxALL wxLEFT wxRIGHT wxTOP wxBOTTOM wxCENTRE wxGROW );
+use Wx qw( wxALIGN_RIGHT wxALIGN_BOTTOM wxALIGN_CENTER wxALIGN_CENTER_VERTICAL wxALIGN_CENTER_HORIZONTAL );
+use Wx qw( wxRA_SPECIFY_COLS );
+
+# Bitmap functions
+
+use Wx qw( wxNullBitmap wxBITMAP_TYPE_PNG );
+
+# Window functions
+
+use vars qw($ID_REUPLOAD_TEXT); $ID_REUPLOAD_TEXT = 10000;
+use vars qw($ID_REUPLOAD_ACTION_FILES); $ID_REUPLOAD_ACTION_FILES = 10001;
+use vars qw($ID_REUPLOAD_ACTION_PROPERTIES); $ID_REUPLOAD_ACTION_PROPERTIES = 10002;
+use vars qw($ID_REUPLOAD_ACTION_PROPERTIES_M); $ID_REUPLOAD_ACTION_PROPERTIES_M = 10003;
+use vars qw($ID_REUPLOAD_NOT_ASK); $ID_REUPLOAD_NOT_ASK = 10004;
+use vars qw($ID_REUPLOAD_OK); $ID_REUPLOAD_OK = 10005;
+
+sub Reupload {
+    my( $parent ) = $_[0];
+    my( $item0 ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    my( $item1 ) = Wx::StaticText->new( $parent, $main::ID_REUPLOAD_TEXT, "Some photos in the selection have already been uploaded. What do you want to do ?", wxDefaultPosition, wxDefaultSize, 0 );
+    $item0->AddWindow( $item1, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item2 ) = Wx::RadioBox->new( $parent, $main::ID_REUPLOAD_ACTION_FILES, "Thumbnail, web size, high definition files", wxDefaultPosition, [600,-1], 
+        ["nothing","replace"] , 1, wxRA_SPECIFY_COLS );
+    $item0->AddWindow( $item2, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item3 ) = Wx::RadioBox->new( $parent, $main::ID_REUPLOAD_ACTION_PROPERTIES, "Title, description, author, created date )", wxDefaultPosition, [600,-1], 
+        ["nothing","append ( keep existing and set if not defined in Piwigo )","replace"] , 1, wxRA_SPECIFY_COLS );
+    $item0->AddWindow( $item3, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item4 ) = Wx::RadioBox->new( $parent, $main::ID_REUPLOAD_ACTION_PROPERTIES_M, "Categories, tags", wxDefaultPosition, [600,-1], 
+        ["nothing","append ( keep existing and add new )","replace"] , 1, wxRA_SPECIFY_COLS );
+    $item0->AddWindow( $item4, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item5 ) = Wx::CheckBox->new( $parent, $main::ID_REUPLOAD_NOT_ASK, "Do not ask me again", wxDefaultPosition, wxDefaultSize, 0 );
+    $item0->AddWindow( $item5, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item6 ) = Wx::Button->new( $parent, $main::ID_REUPLOAD_OK, "OK", wxDefaultPosition, wxDefaultSize, 0 );
+    $item0->AddWindow( $item6, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    $_[0]->SetSizer( $item0 );
+    $item0->SetSizeHints( $_[0] );
+
+    $item0;
+}
+
+use Wx qw( wxITEM_NORMAL wxITEM_RADIO wxITEM_CHECK );
+
+
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxApp.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxApp.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxApp.pm	(revision 6108)
@@ -0,0 +1,1000 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+package Uploader::GUI::wxApp;
+use strict;
+use base qw/Wx::App Class::Accessor::Fast/;    
+use Wx qw/
+             wxBITMAP_TYPE_GIF 
+             wxBITMAP_TYPE_ICO 
+             wxBITMAP_TYPE_BMP 
+             wxBITMAP_TYPE_PNG 
+             wxBITMAP_TYPE_JPEG
+             wxIMAGE_QUALITY_NORMAL
+             wxIMAGE_QUALITY_HIGH
+             wxSPLASH_CENTRE_ON_SCREEN 
+             wxSPLASH_TIMEOUT
+             wxDefaultPosition 
+             wxDefaultSize 
+             wxSIMPLE_BORDER 
+             wxFRAME_TOOL_WINDOW
+             wxFRAME_NO_TASKBAR
+             wxWHITE
+             wxICON_EXCLAMATION
+             wxICON_ERROR
+             wxOK 
+             wxLANGUAGE_CHINESE_SIMPLIFIED   
+             wxLANGUAGE_CZECH   
+             wxLANGUAGE_DANISH   
+             wxLANGUAGE_DUTCH   
+             wxLANGUAGE_ENGLISH   
+             wxLANGUAGE_FRENCH   
+             wxLANGUAGE_GERMAN   
+             wxLANGUAGE_HUNGARIAN
+             wxLANGUAGE_ITALIAN   
+             wxLANGUAGE_JAPANESE   
+             wxLANGUAGE_POLISH   
+             wxLANGUAGE_PORTUGUESE   
+             wxLANGUAGE_PORTUGUESE_BRAZILIAN   
+             wxLANGUAGE_RUSSIAN   
+             wxLANGUAGE_SLOVAK   
+             wxLANGUAGE_SPANISH   
+         /;
+use File::Slurp ;
+use Data::Dumper;
+use Storable;
+use File::HomeDir;
+use File::Spec;
+use Uploader::PWG;
+use Uploader::ImageList;
+use Uploader::GUI::wxLoginDlg;
+use Wx::Locale qw/:default/;
+use utf8;
+
+$|=1;
+
+__PACKAGE__->mk_accessors( 
+    qw/
+          pwg
+          site_url
+          site_username
+          site_password
+          http_username
+          http_password
+          rejects
+          imagelist
+          storable_file
+          wx_thumb_dir
+          resized_dir
+          userdata_dir
+          resized_dir
+          thumb_dir
+          conf_file
+          layout_file
+          locale
+          current_language
+          languages
+          available_languages
+          version
+          imagelist_version
+          use_offline
+          login_dlg
+          branding
+          frame
+          imageviewerIndex
+          frameLayout
+          chunk_size
+          layout_clean
+          colors
+          eng_colors
+          positions
+          eng_positions
+          caption_patterns
+          eng_caption_patterns
+          upload_hd
+          eng_upload_hd
+          privacy_level
+          user_defined_properties
+          root_dir
+          bin_dir
+          resource_dir
+          locale_dir
+          argv
+          default_openfile_dir
+      / 
+);
+
+sub FilterEvent {
+    my( $self, $event ) = @_;
+    
+    Wx::LogMessage "EventType %s", $event->GetEventType();
+    
+    return -1;
+}
+
+# not very clean but :
+# at that moment, object is not yet instanciated
+# only way : class variable
+# there is only one instance of wxApp
+my $root_dir;
+my $bin_dir;
+my $resource_dir;
+my $locale_dir;
+my $argv;
+sub new {
+    my ( $self, $params ) = @_;
+
+    $root_dir      = $params->{root_dir}||'.';
+    $bin_dir      = $params->{bin_dir}||'bin';
+    $locale_dir   = $params->{locale_dir}||'locale';
+    $resource_dir = $params->{resource_dir}||'res';
+    $argv         = $params->{argv};
+
+    $self->SUPER::new();
+}
+
+sub OnInit {
+    my( $self ) = @_;
+
+    $self->root_dir(
+        $root_dir
+    );
+
+    $self->bin_dir(
+        $bin_dir
+    );
+
+    $self->locale_dir(
+        $locale_dir
+    );
+
+    $self->resource_dir(
+        $resource_dir
+    );
+
+    $self->version(
+        '1.6'
+    );
+    
+    # to check if we can use stored cache
+    $self->imagelist_version(
+        '16'
+    );
+    $self->argv(
+        $argv
+    );
+
+    $self->languages(
+      [
+             ["中文 (%s)", wxLANGUAGE_CHINESE_SIMPLIFIED, 'Chinese simplified'],   
+             ["Česky (%s)", wxLANGUAGE_CZECH, 'Czech'],   
+             ["Dansk (%s)", wxLANGUAGE_DANISH, 'Danish'],   
+             ["Deutsch (%s)", wxLANGUAGE_GERMAN, 'German'],   
+             ["English (%s)", wxLANGUAGE_ENGLISH, 'English'],   
+             ["Español (%s)", wxLANGUAGE_SPANISH, 'Spanish'],   
+             ["Français (%s)", wxLANGUAGE_FRENCH, 'French'],   
+             ["Italiano (%s)", wxLANGUAGE_ITALIAN, 'Italian'],   
+             ["日本語 (にほんご) (%s)", wxLANGUAGE_JAPANESE, 'Japanese'],   
+             ["Magyar (%s)", wxLANGUAGE_HUNGARIAN, 'Hungarian'],
+             ["Nederlands (%s)", wxLANGUAGE_DUTCH, 'Dutch'],   
+             ["Polski (%s)", wxLANGUAGE_POLISH, 'Polish'],   
+             ["Português Brasileiro (%s)", wxLANGUAGE_PORTUGUESE_BRAZILIAN, 'Portuguese Brazil'],   
+             ["Português Portugal (%s)", wxLANGUAGE_PORTUGUESE, 'Portuguese Portugal'],   
+             ["Русский (%s)", wxLANGUAGE_RUSSIAN, 'Russian'],
+             ["Slovenčina (%s)", wxLANGUAGE_SLOVAK, 'Slovak'],
+      ]
+    );
+    # some languages may be unavailable due to system configuration.
+    $self->_filter_available_languages;
+    Wx::InitAllImageHandlers();
+    my $applicationName = "pLoader" ;
+    $self->SetAppName( $applicationName );
+    $self->SetVendorName( "Piwigo Team" );
+
+    $self->{IMGTYPE} = {
+        'jpg' => wxBITMAP_TYPE_JPEG,
+        'gif' => wxBITMAP_TYPE_GIF,
+        'png' => wxBITMAP_TYPE_PNG,
+    };
+
+    $self->_init_userdir;
+
+    my $conf = retrieve $self->conf_file if -e $self->conf_file;
+
+    if(defined $conf ){
+        $self->SetKeyValues($conf);
+    }
+    else {
+        $self->_readParams( $self->bin_path('pLoader.ini') ) unless defined $conf ;
+    }
+
+    $self->_read_default_user_properties( $self->bin_path('properties.ini') ) ;
+
+    $self->site_url(
+        $self->{site_url}
+    );
+    
+
+    $self->site_username(
+        $self->{site_username}
+    );
+    $self->site_password(
+        $self->{site_password}
+    );
+
+    $self->http_username(
+        $self->{http_username}
+    );
+    $self->http_password(
+        $self->{http_password}
+    );
+
+
+    $self->current_language(
+        $self->{current_language}||Wx::Locale::GetSystemLanguage()
+    );
+
+    $self->chunk_size(
+        $self->{chunk_size}||500_000
+    );
+    
+    $self->init_locale;
+    $self->_init_localized_properties;
+
+    my $not_exit = $self->Login();
+    # user pressed OK
+    if($not_exit){
+        $self->StoreConnectionProperties;
+        if( !$self->use_offline ){
+            while( $not_exit and !$self->_is_connected ){
+                $not_exit = $self->Login();
+                last if $self->use_offline;
+            }
+            $self->CheckUpload;
+        }
+        $self->_init_imagelist;
+        $self->_init_thumbimagelist;
+        $self->_set_stored_layout;
+    }
+
+    $not_exit;
+}
+
+
+# helper method to get the full path for a resource
+sub resource_path{
+    my ( $self, $file ) = @_;
+
+    File::Spec->catfile($self->root_dir, $self->resource_dir, $file);
+}
+
+sub bin_path{
+    my ( $self, $file ) = @_;
+
+    File::Spec->catfile($self->root_dir, $self->bin_dir, $file);
+}
+
+sub locale_path{
+    my ( $self, $file ) = @_;
+
+    File::Spec->catfile($self->root_dir, $self->locale_dir, $file);
+}
+
+sub locale_catalog_path{
+    my ( $self, $file ) = @_;
+
+    File::Spec->catfile($self->root_dir, $self->locale_dir, $self->locale->GetCanonicalName, $file);
+}
+
+sub _set_stored_layout {
+    my ( $self ) = @_;
+
+
+    # when language is switched, need a new layout
+    unlink $self->layout_file if $self->layout_clean;
+    $self->layout_clean(0);
+
+    my $layout = retrieve $self->layout_file if -e $self->layout_file;	
+    if(defined $layout ){
+        $self->SetKeyValues($layout);
+    }
+
+}
+
+# some properties are displayed in choice list, with translated strings
+# the translation has to be reverted to store a language independant value
+sub _init_localized_properties {
+    my ( $self ) = @_;
+
+    $self->colors(
+        ['Black', 'White']
+    );
+    # We need to translate back to english when we store properties
+    $self->eng_colors(
+        {
+            map { gettext($_) => $_ } @{$self->colors} 
+        }
+    );
+    $self->positions(
+        [
+            'Top',
+            'Left',
+            'Right',
+            'Bottom',
+            'Top left',
+            'Top right',
+            'Bottom left',
+            'Bottom right',
+            'Center',
+        ]
+    );
+
+    $self->eng_positions(
+        { 
+             map { gettext($_) => $_ } @{$self->positions} 
+        }
+    );
+	
+	$self->upload_hd(
+	    [
+		    'No',
+			'Yes, use HD resized of the original photo',
+			'Yes, use a copy of the original photo',
+		]
+	);
+
+    $self->eng_upload_hd(
+        {
+             map { gettext($_) => $_ } @{$self->upload_hd} 
+        }
+    );
+	
+    $self->caption_patterns(
+        [
+             'None',
+             'File name',
+             'File path and name',
+             'Caption',
+             'Caption + rank number',
+             'Rank number + caption',
+             'Caption + create date chrono',
+             'Create date chrono + caption',
+             'Create date chrono + rank',
+             'Rank + create date chrono',
+        ]
+    );
+    $self->eng_caption_patterns(
+        {
+             map { gettext($_) => $_ } @{$self->caption_patterns} 
+        }
+    );
+	
+	# hard coded because the piwigo api to read custom privacy level is not yet available
+	$self->privacy_level(
+	    [
+		    'everybody',
+			'contacts',
+			'friends',
+			'family',
+			'admins'
+		]
+	);
+
+	
+}
+
+# display privacy level list in a pyramid way :
+# ['everybody', 'contacts', friends, family, admins] -> [everybody, 'contacts, friends, family, admins', 'friends, family, admins', 'family, admins', 'admins only' ]
+sub privacy_level_choices{
+    my ( $self ) = @_;
+
+    my $pl = $self->privacy_level;	
+    my $n = scalar @$pl - 1;
+    my $list = [ gettext($pl->[0]) ];
+    my $i=0;
+    while(++$i<$n){    
+        push @$list, join(
+            ', ', 
+            map{ gettext($_) }
+            @$pl[$i..$n] 
+        );
+    }
+    push @$list, gettext($pl->[$n]);
+    
+    $list;
+}
+
+sub _filter_available_languages {
+    my ( $self ) = @_;
+
+    # check if the locale can be set and the translation catalog available
+    $self->available_languages(
+        [
+            grep {$_} 
+            map{
+                #  a locale may be unavailable due to system limitations ( ex: chinese, japanese when language pack are not installed )
+                if(Wx::Locale::IsAvailable($_->[1])){
+                    my $locale = Wx::Locale->new($_->[1]);
+                    $locale->AddCatalogLookupPathPrefix(
+                        File::Spec->catfile($self->root_dir, $self->locale_dir)
+                    );
+                    $_ if $locale->AddCatalog('pLoader');
+                }
+            }
+            @{$self->languages}
+        ]
+    );
+}
+
+sub _is_connected {
+    my ( $self ) = @_;
+
+    my $is_connected;
+
+    if($self->pwg->login_result->{stat} eq 'ok'){
+        $is_connected = 1;
+    }
+    else{
+        Wx::MessageBox( 
+            sprintf(
+                "%s\n\n%s %s %s",
+                $self->pwg->login_result->{message},
+                gettext("Connection to"),
+                $self->site_url,
+                gettext("failed"),
+            ),
+            gettext("Piwigo login error"),
+            wxOK | wxICON_EXCLAMATION, 
+        );
+    }
+    
+    $is_connected;
+}
+
+
+my $locale;
+sub init_locale {
+    my ( $self, $language ) = @_;
+    
+    $self->current_language(
+        $language
+    ) if defined $language;
+
+    undef $locale;
+    $locale = Wx::Locale->new(
+        $self->current_language
+    );
+    $locale->AddCatalogLookupPathPrefix(
+        File::Spec->catfile($self->root_dir, $self->locale_dir)
+    );
+    if(!$locale->AddCatalog( 'pLoader.mo' )){
+        Wx::LogMessage gettext("Cannot find translation catalog files for %s. Use default language"), $locale->GetCanonicalName();
+    }
+    $self->locale($locale);    
+}
+
+sub StoreConnectionProperties {
+    my ( $self ) = @_;
+
+    eval {    
+        store( 
+            {
+                map{
+                   $_ => $self->{$_},
+                }
+                qw/
+                    site_url
+                    site_username
+                    site_password
+                    http_username
+                    http_password
+                    current_language
+                    chunk_size
+                    layout_clean
+                    default_openfile_dir
+                /
+            },
+            $self->conf_file
+        );
+    };
+}
+
+sub StoreLayoutProperties {
+    my ( $self ) = @_;
+
+    eval {    
+        store( 
+            {
+                map{
+                   $_ => $self->{$_},
+                }
+                qw/
+                      imageviewerIndex
+                      frameLayout
+                /
+            },
+            $self->layout_file
+        );
+    };
+}
+
+sub _init_imagelist {
+    my ( $self ) = @_;    
+
+    my $stored_imagelist;
+    
+    my $use_new_imagelist;
+    
+    if( -e $self->storable_file ){
+        eval {
+            $stored_imagelist = retrieve $self->storable_file;
+        };
+        if($@){
+            Wx::LogMessage(
+                gettext("An error has occured. Can not read %s\n%s"),
+                $self->storable_file, 
+                $@
+            );
+            $use_new_imagelist = 1 ;
+        }
+        # should have a valid imagelist
+        else{
+            $use_new_imagelist = 1 unless $self->imagelist_version eq $stored_imagelist->{imagelist_version};
+        }
+        # make sure we really have
+        $use_new_imagelist = 1 unless defined $stored_imagelist;
+
+        if($use_new_imagelist){
+            Wx::LogMessage(gettext("pLoader has to reset image cache."));
+            # and silently clean layout
+            $self->layout_clean(1);
+        }
+    }
+    else{
+        $use_new_imagelist = 1 ;
+    }
+
+    if($use_new_imagelist){
+        $stored_imagelist = $self->_default_imagelist_params ;
+    }
+
+
+    $self->imagelist(
+        Uploader::ImageList->new(
+            $stored_imagelist
+        )
+    );
+
+    $self->imagelist->SetCurrentImage(-1);
+
+    $self->imagelist->ResizeCallback(
+        sub { $self->ResizeImage(@_) }
+    );
+
+    $self->imagelist->YieldCallback(
+        sub { Wx::Yield }
+    );
+}
+
+
+sub _default_imagelist_params {
+    my ( $self ) = @_ ;
+
+    my $params = {
+        new_files        => [],
+        hd_filter        => $self->user_defined_properties->{hd_filter}||'Lanczos',
+        hd_blur          => $self->user_defined_properties->{hd_blur}||0.9,
+        hd_quality       => $self->user_defined_properties->{hd_quality}||95,
+        hd_w             => $self->user_defined_properties->{hd_w}||1600,
+        hd_h             => $self->user_defined_properties->{hd_h}||1200,
+        hd_interlace     => $self->user_defined_properties->{hd_interlace}||'Line',
+        thumb_size       => $self->user_defined_properties->{thumbnail_size}||120,
+        site_thumb_dir   => $self->thumb_dir,
+        wx_thumb_size    => $self->user_defined_properties->{wx_thumbnail_size}||100,
+        wx_thumb_dir     => $self->wx_thumb_dir,
+        resize_w         => $self->user_defined_properties->{resize_w}||800,
+        resize_h         => $self->user_defined_properties->{resize_h}||600,
+        site_resized_dir => $self->resized_dir,
+        type             => 'jpg',
+        filter           => $self->user_defined_properties->{resize_filter}||'Lanczos',
+        blur             => $self->user_defined_properties->{resize_blur}||0.9,
+        quality          => $self->user_defined_properties->{resize_quality}||95,
+        wx_quality       => $self->user_defined_properties->{wx_thumbnail_quality}||90,
+        th_quality       => $self->user_defined_properties->{thumbnail_quality}||90,
+        auto_rotate      => $self->user_defined_properties->{auto_rotate}||1,
+        upload_hd        => $self->user_defined_properties->{upload_hd}||'No',
+        remove_uploaded_from_selection => $self->user_defined_properties->{remove_uploaded_from_selection}||1,
+        interlace        => $self->user_defined_properties->{resize_interlace}||'Line',
+        create_resized   => $self->user_defined_properties->{create_resized}||1,
+        prefix           => 'TN',
+        count            => 0,
+        storable_file    => $self->storable_file,
+        userdata_dir     => $self->userdata_dir,
+        default_caption_pattern => $self->user_defined_properties->{default_caption_pattern}||'File name',
+        default_caption  => $self->user_defined_properties->{default_caption}||gettext('Photo '),
+        upload_rejects   =>  [],
+        image_sums       => {},
+        sums             => [],
+        version          => $self->version,
+        imagelist_version => $self->imagelist_version,
+        ResizeCallback   => sub { $self->ResizeImage(@_) },
+        watermark_text => $self->user_defined_properties->{watermark_text}||gettext("my watermark"),
+        watermark_text_size => $self->user_defined_properties->{watermark_text_size}||12,
+        watermark_position => $self->user_defined_properties->{watermark_position}||'Center',
+        watermark_y => $self->user_defined_properties->{watermark_y}||10,
+        watermark_x => $self->user_defined_properties->{watermark_x}||10,
+        watermark_color => $self->user_defined_properties->{watermark_color}||'White',
+        reupload_action_files => 1,
+        reupload_action_properties => 2,
+        reupload_action_properties_m => 1,
+        display_mode => $self->user_defined_properties->{display_mode}||'Thumbnail and caption',
+    };
+
+    return $params;
+}
+
+sub Login {
+    my ( $self ) = @_;    
+
+    $self->login_dlg( 
+        Uploader::GUI::wxLoginDlg->new(
+            {
+                title         => gettext("Piwigo login"),
+                site_url      => sub { $self->site_url(@_) },
+                site_username => sub { $self->site_username(@_) },    
+                site_password => sub { $self->site_password(@_) },
+                use_offline   => sub { $self->use_offline(@_) },    
+            }
+        )
+    ) unless $self->login_dlg;
+
+    my $icon = Wx::Icon->new();
+    $icon->LoadFile(
+        $self->resource_path('favicon.ico'), 
+        wxBITMAP_TYPE_ICO
+    );
+
+    $self->login_dlg->SetIcon($icon);
+
+    
+    my $rval = $self->login_dlg->ShowModal();
+    $self->login_dlg->Show(0);
+
+    $self->_init_branding;
+    
+    if ($self->site_url !~ /^http:/){
+        $self->site_url(
+            sprintf(
+                "http://%s",
+                $self->site_url
+            )
+        );    
+    }
+
+    $self->pwg(
+        # get these parameters from dialog or from file
+        Uploader::PWG->new(
+            {
+                site_url       => $self->site_url,
+                site_username  => $self->site_username,
+                site_password  => $self->site_password,
+                http_username  => $self->http_username,
+                http_password  => $self->http_password,
+                branding       => $self->branding,
+                chunk_size     => sub { $self->chunk_size(@_) },
+                use_offline    => $self->use_offline,
+                version        => $self->version,
+            }
+        )
+    );
+
+    $rval;
+}
+
+sub _init_userdir {
+    my ( $self ) = @_;
+    
+    my $applicationName = $self->GetAppName ;
+    my $userdatadir = File::Spec->canonpath(
+        File::Spec->catfile(
+            File::HomeDir->my_data(), 
+            "\.$applicationName"
+        )
+    );
+
+    if(! -d $userdatadir){
+        if(! mkdir $userdatadir){
+            Wx::MessageBox( 
+                sprintf(
+                    "%s directory creation failed",
+                    $userdatadir,
+                ),
+                "pLoader working directory creation error",
+                wxOK | wxICON_EXCLAMATION, 
+            );
+
+            $userdatadir = File::Spec->canonpath(
+                File::Spec->catfile(
+                    File::Spec->tmpdir(), 
+                    "\.$applicationName"
+                )
+            );
+            mkdir $userdatadir;
+        }    
+    }
+
+    $self->userdata_dir($userdatadir);
+    
+    $self->conf_file(
+        File::Spec->catfile(
+            $self->userdata_dir, 
+            ".$applicationName.conf"
+        )
+    );
+
+    $self->layout_file(
+        File::Spec->catfile(
+            $self->userdata_dir, 
+            ".$applicationName.layout"
+        )
+    );
+
+    $self->storable_file(
+        File::Spec->catfile($self->userdata_dir, 'pLoader.dat')
+    );
+    
+    my $thumbdir = File::Spec->catfile($self->userdata_dir, 'thumbnails');
+    mkdir $thumbdir unless -d $thumbdir ;
+    $self->thumb_dir($thumbdir);
+
+    my $wxthumbdir = File::Spec->catfile($self->userdata_dir, 'wxthumbnails');
+    mkdir $wxthumbdir unless -d $wxthumbdir ;
+    $self->wx_thumb_dir($wxthumbdir);
+
+
+    my $resizedir = File::Spec->catfile($self->userdata_dir, 'resize');
+    mkdir $resizedir unless -d $resizedir ;
+    $self->resized_dir($resizedir);
+}
+
+sub _init_thumbimagelist {
+    my ( $self ) = @_;
+
+    
+    $self->imagelist->wx_thumb_imglist(
+        Wx::ImageList->new( 
+            $self->imagelist->wx_thumb_size, 
+            $self->imagelist->wx_thumb_size, 
+            1,
+            0
+        )
+    );
+    
+    # reload images 
+    $self->_reload_thumb_images;
+}
+
+
+sub _reload_thumb_images {
+    my ( $self ) = @_;
+    
+    my $wximagelist = $self->imagelist->wx_thumb_imglist;
+    my $sums = $self->imagelist->sums;
+
+    map {
+        my $image = $self->imagelist->image_sums->{$_};
+
+        $wximagelist->Add(
+            Wx::Bitmap->new( 
+                $image->wx_thumb_file, 
+                $self->GetWxBitmapType($self->imagelist->type), 
+            )
+        );
+    }
+    @$sums ;
+
+}
+
+sub GetWxBitmapType {
+    my ( $self, $type ) = @_;
+    
+    $self->{IMGTYPE}->{$type};
+}
+
+
+
+sub ResizeImage {
+    my ( $self, $image_file, $image_file_out, $type, $width, $height, $quality ) = @_;
+   
+
+    my $image = Wx::Image->new(
+            $image_file, 
+            $self->GetWxBitmapType($type),
+            0
+    );
+
+    my $w;
+    my $h;
+
+    my $img_w = $image->GetWidth;
+    my $img_h = $image->GetHeight;
+    
+        # portrait
+        if( $img_w < $img_h ){
+            $w = $height;
+        }
+        else{
+            $w = $width;
+        }
+        # to respect aspect ratio
+        $h = sprintf(
+            "%.0f",
+            ($w*$img_h)/$img_w
+        );
+
+    
+
+    $image->Rescale(
+        $w,
+        $h,
+        wxIMAGE_QUALITY_HIGH
+    );
+
+    #$image->Resize(
+    #    [ $width, $height ], [ 0, 20],
+    #);
+    
+    $quality ||= 90;
+    
+    $image->SetOption( 
+        "quality", 
+        $quality 
+    );
+    
+    if(!$image->SaveFile(
+        $image_file_out,
+        $self->GetWxBitmapType($type),
+    )){
+        Wx::LogMessage(
+            gettext("An error has occured. Can not save file %s"),
+            $image_file_out,
+        )
+    };
+}
+
+# some labels differ with branding ( piwigo.com or piwigo.org )
+sub _init_branding {
+    my ( $self ) =@_;
+    
+    if( $self->site_url =~ /\.piwigo\.com/ ){
+        $self->branding(
+            {
+                category  => gettext("album"),
+                Category  => gettext("Album"),
+                categories => gettext("albums"),
+                Categories => gettext("Albums"),
+                'Add new category' => gettext("Add new album"),
+                'Category name' => gettext("Album name :"),
+                'New category' => gettext("New album"),
+                'What is the destination category?' => gettext("What is the destination album?")
+            }
+        );
+    }
+    else{
+        $self->branding(
+            {
+                category  => gettext("categorie"),	
+                Category  => gettext("Categorie"),	
+                categories => gettext("categories"),	
+                Categories => gettext("Categories"),	
+                'Add new category' => gettext("Add new category"),
+                'Category name' => gettext("Category name :"),
+                'New category' => gettext("New category"),
+                'What is the destination category?' => gettext("What is the destination category?")
+            }
+        );
+    }	
+}
+
+
+sub SetFrame {
+    my ( $self, $frame ) = @_;	
+
+    my $url = $self->site_url;
+    
+    if($self->use_offline){
+    	$url = gettext("Work Offline");
+    }
+
+    $self->frame($frame);
+
+    my $icon = Wx::Icon->new();
+    $icon->LoadFile(
+        File::Spec->catfile(
+            $self->root_dir, $self->resource_dir, 'favicon.ico'
+        ), 
+        wxBITMAP_TYPE_ICO
+    );
+    $self->frame->SetIcon($icon);
+}
+
+sub _readParams {
+	my( $self, $file ) = @_ ;
+
+
+    my $expr_params ;
+    eval { $expr_params = read_file( $file ); } ;
+    
+    my $paramValues = [] ;
+    if($expr_params){
+        my $expr = '$paramValues = ' ;
+        $expr .=  "$expr_params ; " ;
+        eval $expr ;
+    }
+    
+    return unless 'ARRAY' eq ref $paramValues ;
+    
+    if(scalar(@$paramValues )){
+        my $params = $paramValues->[0] ;
+        $self->SetKeyValues($params);
+    }
+}
+
+sub _read_default_user_properties {
+    my( $self, $file ) = @_ ;
+
+
+    my $expr_params ;
+    eval { $expr_params = read_file( $file ); } ;
+    my $properties;
+    if($expr_params){
+        my $expr = '$properties = ' ;
+        $expr .=  " { $expr_params }; " ;
+        eval $expr ;
+    }
+    $properties = {} unless 'HASH' eq ref $properties;
+    $self->user_defined_properties($properties);
+
+}
+
+
+
+sub SetKeyValues {
+    my ( $self, $params )= @_;    
+
+    foreach( keys %$params ) {
+        $self->{$_} = $params->{$_} ;
+    }
+}
+
+
+sub CheckUpload {
+    my ( $self ) = @_;
+
+    my $err_msg = $self->pwg->CheckUpload;
+
+    $err_msg = gettext("Your user account is not granted to upload photos") if
+        'Access denied' eq $err_msg;
+
+    #Wx::LogMessage("%s", $err_msg) if $err_msg;
+    Wx::MessageBox($err_msg, "", wxOK | wxICON_ERROR) if $err_msg;
+
+    $err_msg;
+}
+1;
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxCategoryTreeCtrl.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxCategoryTreeCtrl.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxCategoryTreeCtrl.pm	(revision 6108)
@@ -0,0 +1,303 @@
+package Uploader::GUI::wxCategoryTreeCtrl;
+use strict;
+use Wx;
+use Wx::DND;
+use base qw/Wx::TreeCtrl Class::Accessor::Fast/;
+
+use Wx qw/
+    wxTheApp
+    wxBITMAP_TYPE_PNG
+    wxDefaultPosition
+    wxDefaultSize
+    wxALIGN_CENTER
+    wxALL
+    wxSWISS
+    wxNORMAL
+    wxVERTICAL
+    wxBOLD
+    wxWHITE
+    wxID_CANCEL
+/;
+
+__PACKAGE__->mk_accessors( 
+    qw/
+          wx_img
+          categories
+          root
+          selection_ids
+          frame_callback
+      / 
+);
+use Data::Dumper;
+
+
+sub new {
+    my( $class, $params ) = @_;
+  
+    my( $self ) = $class->SUPER::new(
+        $params->{parentwnd},
+        $params->{id}||-1,
+        $params->{position}||wxDefaultPosition,
+        $params->{size}||[ -1, -1],
+    );
+    
+    $self->categories(
+        $params->{categories}
+    );
+
+    $self->selection_ids(
+        $params->{selection_ids}
+    );
+
+    $self->frame_callback(
+        $params->{frame_callback}
+    );
+
+
+    $self->init_bitmaps;
+    $self->init_empty_category_msg;
+    $self->init_empty_category_evt;
+
+    if(wxTheApp->use_offline){
+        $self->Enable(0);
+    }
+    else{
+        $self->Populate;
+    }
+
+
+    $self;
+}
+
+
+sub ShowEmptyMsg {
+    my ( $self ) = @_;
+
+    $self->{_empty_panel}->Show;
+}
+
+
+sub HideEmptyMsg {
+    my ( $self ) = @_;
+
+    $self->{_empty_panel}->Hide;
+}
+
+
+sub init_bitmaps{
+    my ( $self ) = @_;
+
+    $self->wx_img(
+        Wx::ImageList->new( 16, 16, 1 )
+    );
+
+
+    map {
+        $self->wx_img->Add(
+            Wx::Bitmap->new( $_, wxBITMAP_TYPE_PNG )
+        );
+    }
+    (
+        wxTheApp->resource_path('tree_pwg.png'),
+        wxTheApp->resource_path('tree_folder.png'),
+    );
+
+    $self->SetImageList( $self->wx_img );
+}
+
+
+sub itemData { Wx::TreeItemData->new( $_[0] ) }
+
+
+sub Populate {
+    my ( $self ) = @_;
+    
+    my $tree_items = $self->categories;
+    my $root = shift @{$tree_items};
+
+    $self->root(
+        $self->AddRoot( 
+            $root->[0], 
+            $root->[3], 
+            $root->[4], 
+            itemData( $root->[2] ) 
+        )
+    );
+
+  $self->populate_tree_helper( $self->root, $tree_items );
+  
+  $self->Expand( $self->root );
+}
+
+sub populate_tree_helper {
+  my ( $self, $parent_id, $tree_items ) = @_;
+
+  my $id;
+
+  map {
+      my $name = $_->[0];
+
+      $id = $self->AppendItem( 
+                                   $parent_id, 
+                                   $name,
+                                   defined($_->[3]) ? $_->[3] : 0, 
+                                   defined($_->[4]) ? $_->[4] : 0, 
+                                   itemData( $_->[2]) 
+                              );
+      # current item has children
+      if( ref( $_->[1] ) eq 'ARRAY' ) {
+          $self->populate_tree_helper( $id, $_->[1] );
+      } 
+  }
+  @{$tree_items};
+
+}
+
+
+sub init_empty_category_msg {
+
+    my ( $self ) = @_;
+    # add a panel
+    my $empty_panel = Wx::Panel->new($self, -1, wxDefaultPosition, wxDefaultSize);
+    my( $item0 ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    my $fb = Wx::Font->new( 12, wxSWISS, wxNORMAL, wxBOLD );
+
+
+    my( $item1 ) = Wx::Button->new(
+        $empty_panel,
+        $main::CATEGORIES_ADD,
+        wxTheApp->branding->{'Add new category'},
+        wxDefaultPosition,
+        [-1,40],
+        0
+    );
+    my $btfont = Wx::Font->new(12, wxSWISS, wxNORMAL, wxNORMAL );
+    $item1->SetFont($btfont);
+    $item0->AddWindow( $item1, 0, wxALIGN_CENTER|wxALL, 5 );
+
+
+    $empty_panel->SetSizer( $item0 );
+    $item0->SetSizeHints( $empty_panel );
+
+    $self->{_empty_panel} = $empty_panel;
+    $self->{_empty_panel}->SetBackgroundColour(wxWHITE);
+
+    my ($wp, $hp) = $self->{_empty_panel}->GetSizeWH;
+
+    $self->SetMinSize( [20+$wp, -1 ]);
+
+    Wx::Event::EVT_BUTTON( $self, $main::CATEGORIES_ADD, \&AddCategory );
+}
+
+
+sub init_empty_category_evt{
+    my ( $self ) = @_;
+
+    Wx::Event::EVT_PAINT( $self, sub {
+            my ( $tree, $event ) = @_;
+            if(exists $tree->{_empty_panel} and ! exists $tree->{_empty_panel}{_paint}){
+                my ($w, $h) = $tree->GetSizeWH;
+                my ($x, $y) = $tree->{_empty_panel}->GetPositionXY;
+
+                $tree->{_empty_panel}{x} = $x if !exists $tree->{_empty_panel}{x} ;
+                $tree->{_empty_panel}{y} = $y if !exists $tree->{_empty_panel}{y};
+                my ($wp, $hp) = $tree->{_empty_panel}->GetSizeWH;
+                my $x_off = ($w-$wp)/2 > 0 ? ($w-$wp)/2 : 0;
+                my $y_off = ($h-$hp)/2 > 0 ? ($h-$hp)/2 : 0;
+                $tree->{_empty_panel}->Move(
+                    [
+                        $tree->{_empty_panel}{x}+$x_off,
+                        $tree->{_empty_panel}{y}+$y_off
+                    ]
+                );
+                $tree->{_empty_panel}{_paint} = 1;
+            }
+            $event->Skip;
+        }
+    );
+
+}
+
+
+sub GetSelectionsIds {
+    my ( $self )=@_;
+
+
+    return [
+        grep { defined $_ }
+        map {
+            my $category = $self->GetPlData( $_ );
+            $category != -1 ?
+                $category->{id} :
+                undef ;
+        }
+        ( $self->GetSelections ) 
+    ];
+}
+
+
+sub AddCategory {
+    my ( $self, $event ) = @_;
+
+    $self->SelectDefaultParent;
+
+    my $parent_category_id = $self->GetSelectionsIds->[0];
+    my $parent_item = $self->GetSelection;
+
+    my $dialog = Wx::TextEntryDialog->new( 
+        $self, 
+        wxTheApp->branding->{'Category name'}, 
+        wxTheApp->branding->{'Add new category'},
+        wxTheApp->branding->{'New category'}, 
+    );
+
+    if( $dialog->ShowModal != wxID_CANCEL ) {
+        my $name = $dialog->GetValue;
+        my ( $success, $status_msg, $content ) = wxTheApp->pwg->AddCategories( $name, $parent_category_id);
+
+        if($success){
+            $self->_append_category($parent_item, $name, $content->{result}{id});
+            # direct, without test on pwg_categories
+            # because of lazy refresh to avoid re-populating the whole tree
+            $self->ShowHideEmptyCategoriesMsg;
+            $self->frame_callback->() if 'CODE' eq ref $self->frame_callback;
+        }
+    }
+
+    $dialog->Destroy;
+}
+
+
+sub SelectDefaultParent {
+    my ( $self ) = @_;
+
+    if(!scalar @{$self->GetSelectionsIds}){
+        $self->SelectItem($self->GetRootItem);
+    }
+}
+
+sub ShowHideEmptyCategoriesMsg {
+    my ( $self ) = @_;
+
+    $self->GetCount > 1 ?
+        $self->HideEmptyMsg :
+        $self->ShowEmptyMsg;
+}
+
+
+sub _append_category {
+    my ( $self, $parent_id, $name, $id ) = @_;
+
+    $self->SelectItem(
+        $self->AppendItem(
+            $parent_id, 
+            $name, 
+            1, 
+            -1, 
+            Wx::TreeItemData->new( { id => $id } )
+        )
+    );
+}
+
+1;
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxChoiceFilteredPanel.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxChoiceFilteredPanel.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxChoiceFilteredPanel.pm	(revision 6108)
@@ -0,0 +1,469 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+package Uploader::GUI::wxChoiceFilteredPanel;
+use strict;
+use Wx qw/
+             wxDefaultSize
+             wxDefaultPosition
+             wxVERTICAL
+             wxALIGN_CENTER_VERTICAL
+             wxALL
+             wxSHAPED
+             wxALIGN_CENTER
+             wxTE_PROCESS_ENTER
+             wxRA_SPECIFY_ROWS
+             wxGROW
+             wxEXPAND
+         /;
+
+use base qw/Wx::Panel Uploader::Object2/;
+use Wx::Locale qw/:default/;
+
+use Data::Dumper;
+__PACKAGE__->mk_accessors(     
+    qw/
+        frame_callbacks
+        choices
+        selection
+        id_lookup
+        row_lookup
+        id_from_name
+        search
+        choices_list
+        btn_show
+        show_method
+        is_selected
+        creation_callback
+        search_result
+        previous_autocompleted
+        autocomplete_from
+        autocomplete_to
+        autocomplete_set_selection
+        current_show_mode
+      /
+);
+
+
+sub new {
+    my ($this, $params) = @_;
+    #on recupere le nom de la classe en fonction du type d'appel de la méthode.
+    my $class = ref($this) || $this;
+
+    my $self = $class->SUPER::new( $params->{parentwnd}, $params->{id}||-1, wxDefaultPosition, wxDefaultSize );
+
+    $self->init_panel;
+    $self->init_properties($params);
+    $self->init_event_handlers;
+
+    $self;
+}
+
+
+sub init_panel {
+    my ( $self ) = @_;    
+
+    my( $vsizer ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    $self->search(
+        Wx::SearchCtrl->new( $self, -1, "", wxDefaultPosition, [-1,-1],wxTE_PROCESS_ENTER )
+    );
+
+    $self->search->ShowCancelButton( 1 );
+    $vsizer->Add( $self->search, 0, wxEXPAND|wxALL, 2 );
+
+    $self->choices_list(
+        Wx::CheckListBox->new( $self, -1, wxDefaultPosition, [-1,-1], [], 0 )
+    );
+    $vsizer->Add( $self->choices_list, 1, wxEXPAND|wxALL, 2 );
+
+    $self->btn_show(
+        Wx::RadioBox->new( $self, -1, sprintf("%s :", gettext("Show")), wxDefaultPosition, [-1, -1], 
+            [gettext("All"),gettext("Selection")] , 1, wxRA_SPECIFY_ROWS )
+    );
+    $vsizer->Add( $self->btn_show, 0, wxEXPAND|wxALL, 2 );
+
+    $self->SetSizer( $vsizer );
+    $vsizer->Fit( $self );
+}
+
+
+sub init_properties {
+    my ( $self, $params ) = @_;    
+    
+    $self->choices(
+        $params->{choices}|| sub { [] }
+    );
+
+    $self->selection(
+        $params->{selection}|| sub{ [] }
+    );
+
+    $self->search_result(
+        []
+    );
+    
+    $self->is_selected({});
+    
+    $self->creation_callback(
+        $params->{creation_callback}
+    ) if 'CODE' eq ref($params->{creation_callback});
+
+    $self->show_method(
+        {
+            gettext("All") => sub { $self->show_all(@_) },
+            gettext("Selection") => sub { $self->show_selected(@_) },
+        }
+    );
+}
+
+
+sub RefreshChoices {
+    my ( $self ) = @_;
+
+    $self->refresh_lookups(
+        $self->choices->()
+    );
+    $self->refresh_is_selected;
+    my $show_mode = $self->current_show_mode||gettext("All");
+    $self->show_method->{$show_mode}->();
+}
+
+
+sub refresh_lookups {
+    my ( $self, $choices ) = @_;
+
+    $self->id_lookup({});
+    $self->row_lookup({});
+    $self->id_from_name({});
+
+    my $row = 0;
+    #print Dumper $self->properties;
+    map {
+        $self->id_lookup->{$row} = $_->{id};
+        $self->row_lookup->{$_->{id}} = $row;
+        $self->id_from_name->{$_->{name}} = $_->{id};
+        $row++;    
+    }@{$choices};
+
+}
+
+
+sub refresh_is_selected {
+    my ( $self ) = @_;
+
+    my $selection = $self->selection->();
+    $self->is_selected({});
+
+    map {
+        $self->is_selected->{$_} = 1;
+    } @$selection;
+
+}
+
+
+sub show_all {
+    my ( $self ) = @_;
+
+    my $choices = $self->choices->();
+    $self->current_show_mode(
+        gettext("All")
+    );
+    $self->refresh_choices_list(
+        $self->choices->()
+    );
+}
+
+
+sub show_selected {
+    my ( $self ) = @_;    
+
+    $self->current_show_mode(
+        gettext("Selection")
+    );
+
+    $self->refresh_choices_list(
+        $self->get_selected_choices()
+    );
+}
+
+
+sub refresh_choices_list {
+    my ( $self, $choices ) = @_;
+
+    $self->choices_list->Freeze;
+    $self->choices_list->Clear;
+
+    #print Dumper $self->properties;
+    my $i=0;
+    map {
+        $self->choices_list->Append(
+            $_->{name},
+        );
+        $self->choices_list->Check(
+            $i,
+            $self->is_selected->{$_->{id}}
+        );
+        $i++;
+    }@{$choices};
+    $self->choices_list->Thaw;
+}
+
+
+sub get_selected_choices {
+    my ( $self ) = @_;
+
+    my $choices = $self->choices->()||[];
+    # each choice item is { id => $id,  name => $name, url_nam => $url_name }
+    my $selected = [
+        grep { $self->is_selected->{$_->{id}} } @$choices
+    ];
+
+
+    $selected;
+}
+
+
+sub ClearAllSelection {
+    my ( $self ) = @_;
+
+    my $row = 0;
+    
+    my $choices = $self->choices->();
+    $self->choices_list->Freeze;
+    map {
+        $self->choices_list->Check($row, 0) ;    
+        $row++;
+    }@$choices;
+    $self->choices_list->Thaw;
+}
+
+
+sub init_event_handlers {
+    my ( $self ) = @_;
+
+    Wx::Event::EVT_CHECKLISTBOX( $self, $self->choices_list, \&OnCheck );
+    Wx::Event::EVT_LISTBOX( $self, $self->choices_list, \&OnSelected );
+    Wx::Event::EVT_SEARCHCTRL_SEARCH_BTN( $self, $self->search, \&OnSearch );
+    Wx::Event::EVT_SEARCHCTRL_CANCEL_BTN( $self, $self->search, \&OnCancel );
+    Wx::Event::EVT_TEXT( $self, $self->search, \&OnSearch );
+    Wx::Event::EVT_TEXT_ENTER( $self, $self->search, \&OnSearchEnter );
+    Wx::Event::EVT_RADIOBOX( $self, $self->btn_show, \&OnShow );
+    # fix for linux : can not call SetSelection before the current event is processed.
+    # call when idle
+    Wx::Event::EVT_IDLE(
+        $self,
+        sub {
+            my ($self, $event)=@_;
+            $self->search->SetSelection(
+                $self->autocomplete_from,
+                $self->autocomplete_to
+            ) if $self->autocomplete_set_selection;
+            $self->autocomplete_set_selection(0);
+        }
+    );
+
+}
+
+
+sub OnSelected {
+    my ( $self, $event ) = @_;
+
+    my $list = $event->GetEventObject;
+    my $row = $event->GetInt;
+
+    $list->Check(
+        $row,
+        !$list->IsChecked($row)    
+    );
+
+    $self->OnCheck($event);
+
+}
+
+
+sub OnCheck {
+    my ( $self, $event ) = @_;
+
+    my $list = $event->GetEventObject;
+    my $indx = $event->GetInt;
+    my $item = $list->GetString($indx);
+    if($list->IsChecked($indx)){
+       $self->add_to_selection($item);
+    }
+    else{
+        $self->remove_from_selection($item);
+    }
+    
+}
+
+
+sub add_to_selection {
+    my ( $self, $item ) = @_;
+
+    return if !defined $item;
+
+    my $id = $self->id_from_name->{$item};
+    return if !defined $id;
+
+    $self->is_selected->{$id} = 1;
+    my $selection = $self->selection->();
+
+    $self->selection->(
+        [
+            $id,
+            @$selection
+        ]
+    );
+}
+
+
+sub remove_from_selection {
+    my ( $self, $item ) = @_;
+
+    my $id = $self->id_from_name->{$item};
+    my $selection = $self->selection->();
+    $self->selection->(
+        [
+            grep { $_ ne $id } @$selection
+        ]
+    );
+    $self->refresh_is_selected;
+}
+
+
+sub OnShow {
+    my( $self, $event ) = @_;
+
+    my $show_mode = $event->GetString();
+    $self->show_method->{$show_mode}->();
+}
+
+
+sub OnSearchEnter {
+    my( $self, $event ) = @_;
+
+    my $searched = $self->search->GetValue;
+    eval { $searched =~ s/\s+$//; };
+    $searched = $searched eq "" ? undef : $searched ;
+
+    my $cleanup;
+    if(defined($searched)){
+    
+        my $busy = Wx::BusyCursor->new();
+    
+        if(!scalar @{$self->search_result}){
+            $self->creation_callback->(
+                $searched    
+            );
+    
+            $self->refresh_selected_searched($searched);
+            $cleanup = 1;
+        }
+    
+        if( 1 == scalar @{$self->search_result}){
+            $self->refresh_selected_searched($searched);
+            $cleanup = 1;
+        }
+    
+    }
+    else{
+        $cleanup = 1;
+    }
+
+    if($cleanup){    
+        $self->search->ChangeValue("");
+        $self->search->SetFocus;
+    }
+}
+
+sub refresh_selected_searched {
+    my ( $self, $searched ) = @_;        
+
+    $self->refresh_lookups(
+        $self->choices->()
+    );
+    $self->add_to_selection($searched);
+    $self->show_selected;
+    $self->btn_show->SetStringSelection(gettext("Selection"));
+}
+
+sub OnSearch {
+    my( $self, $event ) = @_;
+
+    $self->btn_show->SetStringSelection(gettext("All"));
+
+    my $searched = $self->search->GetValue;
+
+    $self->search_result(
+        $self->search_in_choices(
+            $searched
+        )
+    );
+
+    $self->refresh_choices_list(
+        $self->search_result
+    );
+    
+    # autocompletion
+    if(1== scalar @{$self->search_result}){
+        my $value = $self->search_result->[0]->{name};
+        unless(  $value eq $self->previous_autocompleted ){
+            $self->autocomplete_from(
+                $self->search->GetLastPosition
+            );
+            $self->search->ChangeValue($value);
+            $self->autocomplete_to(
+                $self->search->GetLastPosition
+            );
+            $self->autocomplete_set_selection(1);
+            $self->previous_autocompleted($value);
+        }    
+    }
+    else{
+        $self->previous_autocompleted(undef);
+    }
+    
+    $event->Skip;
+}
+
+
+sub search_in_choices {
+    my ( $self, $searched ) = @_;
+    
+    my $choices = $self->choices->()||[];
+    
+    [
+       grep { $_->{name} =~ /\b$searched/i} @$choices
+    ];
+}
+
+
+sub OnCancel {
+    my( $self, $event ) = @_;
+
+    $self->init_choices_list(
+        $self->choices->()
+    );
+    
+    $self->btn_show->SetStringSelection(gettext("All"));
+}
+
+
+1;
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxDestinationCategoryDlg.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxDestinationCategoryDlg.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxDestinationCategoryDlg.pm	(revision 6108)
@@ -0,0 +1,107 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+package Uploader::GUI::wxDestinationCategoryDlg;
+use strict;
+use Wx qw/
+             wxDefaultSize
+             wxDefaultPosition
+             wxDIALOG_NO_PARENT
+             wxDEFAULT_DIALOG_STYLE
+             wxMAXIMIZE_BOX
+             wxMINIMIZE_BOX
+             wxID_CANCEL
+             wxID_OK
+         /;
+use base qw/Wx::Dialog Uploader::GUI::DlgCommon Class::Accessor::Fast/;
+use Wx::Event qw/
+                    EVT_BUTTON
+                /;
+
+__PACKAGE__->mk_accessors( 
+    qw/
+           btok
+      / 
+);
+use Carp;
+use Uploader::GUI::wxCategoryTreeCtrl;
+
+sub new {
+    my ($this, $params) = @_;
+    #on recupere le nom de la classe en fonction du type d'appel de la méthode.
+    my $class = ref($this) || $this;
+
+
+    my $self = $class->SUPER::new(
+        undef, 
+        -1,
+        $params->{caption},
+        wxDefaultPosition,
+        [450, 300],
+             wxDIALOG_NO_PARENT|
+             wxDEFAULT_DIALOG_STYLE|
+             wxMAXIMIZE_BOX|
+             wxMINIMIZE_BOX
+    );
+    # load controls
+    &main::DestinationCategory($self, $params );
+
+    $self->properties(
+        $params->{properties}
+    );
+
+    $self->InitLabels();
+    $self->InitChoices();
+    $self->SetProperties();
+    $self->InitHandler();
+
+    $self->init_event_handlers();
+    
+    $self->btok( $self->FindWindow($main::DESTINATION_CATEGORIES_OK) );
+    $self->btok->Enable(0);
+
+    $self;
+}
+
+
+sub init_event_handlers {
+    my ( $self ) = @_;
+    
+    EVT_BUTTON( $self, $main::DESTINATION_CATEGORIES_OK, \&OnOK );
+    EVT_BUTTON( $self, $main::DESTINATION_CATEGORIES_CANCEL, \&OnCancel );
+    
+}
+
+# Update progress information
+
+sub OnOK {
+    my ( $self, $event ) = @_;
+    
+    $self->EndModal(wxID_OK);
+}
+
+
+sub OnCancel {
+    my ( $self, $event ) = @_;
+    
+    $self->ClearProperties;
+    $self->EndModal(wxID_CANCEL);
+}
+
+1;
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxGlobalSettings.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxGlobalSettings.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxGlobalSettings.pm	(revision 6108)
@@ -0,0 +1,296 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+package Uploader::GUI::wxGlobalSettings;
+use strict;
+use Wx qw/
+            wxDefaultSize
+            wxDefaultPosition
+            wxVERTICAL
+            wxDEFAULT_DIALOG_STYLE
+            wxCAPTION
+            wxCLOSE_BOX
+            wxMAXIMIZE_BOX
+            wxMINIMIZE_BOX
+            wxRESIZE_BORDER
+            wxALIGN_CENTER
+            wxALL
+            wxBK_DEFAULT
+            wxALIGN_CENTER_VERTICAL
+            wxGROW
+            wxALIGN_CENTER_VERTICAL
+            wxLI_HORIZONTAL
+            wxALIGN_BOTTOM
+            wxALIGN_CENTER_HORIZONTAL
+            wxBITMAP_TYPE_PNG
+            wxTheApp
+            wxBK_LEFT
+            wxHORIZONTAL
+        /;
+use base qw/Wx::Dialog Uploader::GUI::DlgCommon/;
+use Wx::Locale qw/:default/;
+use Wx::Event qw/
+            EVT_CLOSE
+        /;
+
+use Carp;
+use Data::Dumper;
+
+sub new {
+    my ($this, $params) = @_;
+
+    my $class = ref($this) || $this;
+
+
+    my $self = $class->SUPER::new(
+        undef,
+        -1,
+        $params->{caption},
+        wxDefaultPosition,
+        wxDefaultSize,
+            wxCAPTION|
+            wxCLOSE_BOX|
+            wxMAXIMIZE_BOX|
+            wxMINIMIZE_BOX|
+            wxRESIZE_BORDER|
+            wxDEFAULT_DIALOG_STYLE
+    );
+
+
+
+
+    $self->{tags} = $params->{tags};
+    $self->{orientation} = $params->{orientation}||wxVERTICAL;
+
+    # load controls
+    GlobalSetting_ToolBook($self, 1);
+
+    $self->properties(
+        $params->{properties}
+    );
+
+
+    $self->{cpane_thumbnail} = $self->FindWindow($main::CPANE_THUMBNAIL);
+    $self->{cpane_resize} = $self->FindWindow($main::CPANE_RESIZE);
+    $self->{cpane_resize_advanced} = $self->FindWindow($main::CPANE_RESIZE_ADVANCED);
+    $self->{cpane_hd} = $self->FindWindow($main::CPANE_HD);
+    $self->{cpane_hd_advanced} = $self->FindWindow($main::CPANE_HD_ADVANCED);
+    $self->{cpane_watermark} = $self->FindWindow($main::CPANE_WATERMARK);
+    $self->{cpane_transfert_advanced} = $self->FindWindow($main::CPANE_TRANSFERT_ADVANCED);
+    $self->{gs_close} = $self->FindWindow($main::GS_CLOSE);
+
+    $self->InitLabels();
+    $self->InitChoices();
+    $self->SetProperties();
+    $self->InitHandler();
+    $self->_initEventHandlers();
+
+    $self->_DefautPhotoCaption(
+        $main::GS_DEFAULT_PHOTO_CAPTION
+    );
+
+    if($@){
+        Wx::LogMessage("Error during dialogbox initialization");
+    }
+
+    # Force layout an paint : awful but works
+    $self->{cpane_hd}->Collapse(0);
+    $self->{cpane_hd}->Collapse(1);
+
+    $self;    
+}
+
+
+
+sub _initEventHandlers {
+    my ( $self ) = @_;
+    
+    Wx::Event::EVT_BUTTON( $self, $self->{gs_close}, \&OnClose );
+    # Required for GTK
+    Wx::Event::EVT_COLLAPSIBLEPANE_CHANGED( $self, $self->{cpane_thumbnail}, \&OnPaneChanged );
+    Wx::Event::EVT_COLLAPSIBLEPANE_CHANGED( $self, $self->{cpane_resize}, \&OnPaneChanged );
+    Wx::Event::EVT_COLLAPSIBLEPANE_CHANGED( $self, $self->{cpane_resize_advanced}, \&OnPaneChanged );
+    Wx::Event::EVT_COLLAPSIBLEPANE_CHANGED( $self, $self->{cpane_hd}, \&OnPaneChanged );
+    Wx::Event::EVT_COLLAPSIBLEPANE_CHANGED( $self, $self->{cpane_hd_advanced}, \&OnPaneChanged );
+    Wx::Event::EVT_COLLAPSIBLEPANE_CHANGED( $self, $self->{cpane_watermark}, \&OnPaneChanged );
+    Wx::Event::EVT_COLLAPSIBLEPANE_CHANGED( $self, $self->{cpane_transfert_advanced}, \&OnPaneChanged );
+
+
+}
+
+
+sub OnClose {
+    my ( $self, $event ) = @_;
+    
+    $self->_close;
+}
+
+sub _close {
+    my ( $self ) = @_;
+
+
+    $self->Hide;
+}
+
+
+sub OnDefaultPhotoCaption {
+    my ( $self, $event ) = @_;
+    
+    $self->_DefautPhotoCaption(
+        $event->GetId
+    );
+
+    $event->Skip(1);
+}
+
+# Display prefix textfield when needed
+sub _DefautPhotoCaption {
+    my ( $self, $id ) = @_;
+
+    my $b=0;
+    if('CODE' eq ref $self->properties->{$id}->{string_selection}){
+        if ( $self->properties->{$id}
+            ->{string_selection}->() =~ /caption/i ){
+            $b=1;
+        }
+    }
+
+    map {
+        $self->FindWindow($_)->Show($b)
+    }(
+        $main::PHOTO_CAPTION_PREFIX,
+        $main::GS_PHOTO_CAPTION_PREFIX
+    );
+}
+
+sub OnCreateResized {
+    my ( $self, $event ) = @_;
+    
+    my $id = $event->GetId;
+    my $b = 1;
+    if('CODE' eq ref $self->properties->{$id}->{selection}){
+        $b = !$self->properties->{$id}->{selection}->()
+    }
+
+    $self->{cpane_resize}->Collapse($b);
+
+    $event->Skip(1);
+
+}
+
+
+sub OnHDUpload {
+    my ( $self, $event ) = @_;
+    
+
+    my $id = $event->GetId;
+    my $b = 1;
+    if('CODE' eq ref $self->properties->{$id}->{string_selection}){
+        if ( $self->properties->{$id}
+            ->{string_selection}->() =~ /resized/){
+            $b = 0;
+        }
+    }
+    $self->{cpane_hd}->Collapse($b);
+
+    $event->Skip(1);
+}
+
+sub OnWatermark {
+    my ( $self, $event ) = @_;
+    
+    my $id = $event->GetId;
+    my $b = 1;
+    if('CODE' eq ref $self->properties->{$id}->{value}){
+        $b = !$self->properties->{$id}->{value}->()
+    }
+
+    $self->{cpane_watermark}->Collapse($b);
+
+    $event->Skip(1);
+}
+
+sub OnPaneChanged {
+    my( $self, $event ) = @_;
+
+    $self->Layout;
+    $event->Skip(1);
+}
+
+
+sub GlobalSetting_ToolBook {
+    my( $parent ) = $_[0];
+    my( $topsizer ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    my( $tbook ) = Wx::Toolbook->new( $parent, $main::ID_NOTEBOOK, wxDefaultPosition, [-1,-1], wxBK_LEFT  );
+
+    my $imgl = Wx::ImageList->new( 16, 16 );
+
+    map {
+        $imgl->Add(
+            Wx::Bitmap->new( wxTheApp->resource_path($_), wxBITMAP_TYPE_PNG )
+        )
+    } qw/picture_edit.png pictures.png picture_key.png picture_go.png world.png/;
+
+    $tbook->AssignImageList($imgl);
+
+    my( $item3 ) = Wx::Panel->new( $tbook, -1 );
+    &main::GS_photo_properties( $item3, 0 );
+    $tbook->AddPage( $item3, gettext("Photo properties"), 0, 0 );
+
+    my( $item4 ) = Wx::Panel->new( $tbook, -1 );
+    &main::GS_photo_preparation( $item4, 0 );
+    $tbook->AddPage( $item4, gettext("Photo size"), 0, 1 );
+
+    my( $item5 ) = Wx::Panel->new( $tbook, -1 );
+    &main::GS_photo_watermark( $item5, 0 );
+    $tbook->AddPage( $item5, gettext("Watermark"), 0, 2 );
+
+    my( $item6 ) = Wx::Panel->new( $tbook, -1 );
+    &main::GS_photo_transfer( $item6, 0 );
+    $tbook->AddPage( $item6, gettext("Transfer"), 0, 3 );
+
+    my( $item7 ) = Wx::Panel->new( $tbook, -1 );
+    &main::GS_language( $item7, 0 );
+    $tbook->AddPage( $item7, gettext("Language choice"), 0, 4 );
+
+
+    $topsizer->Add( $tbook, 0, wxALIGN_CENTER|wxALL, 5 );
+
+
+    my( $item87 ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    my( $item88 ) = Wx::StaticLine->new( $parent, -1, wxDefaultPosition, [20,-1], wxLI_HORIZONTAL );
+    $item87->AddWindow( $item88, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+    my( $item89 ) = Wx::Button->new( $parent, $main::GS_CLOSE, gettext("Close"), wxDefaultPosition, wxDefaultSize, 0 );
+    $item87->AddWindow( $item89, 0, wxALIGN_BOTTOM|wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
+
+    $topsizer->Add( $item87, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+
+    $_[0]->SetSizerAndFit( $topsizer );
+
+
+
+    $topsizer;
+}
+
+
+1;
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxImageListCtrl.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxImageListCtrl.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxImageListCtrl.pm	(revision 6108)
@@ -0,0 +1,463 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+package Uploader::GUI::wxImageListCtrl;
+use strict;
+use Wx;
+use Wx::DND;
+use POSIX qw(ceil floor);
+use Wx::Locale qw/:default/;
+use Wx qw/
+             wxDefaultPosition
+             wxDefaultSize
+             wxLC_LIST
+             wxNO_BORDER
+             wxLC_EDIT_LABELS
+             wxLC_ICON
+             wxLC_REPORT
+             wxLC_SMALL_ICON
+             wxIMAGE_LIST_NORMAL
+             wxBITMAP_TYPE_JPEG
+             wxBITMAP_TYPE_PNG
+             wxBLACK
+             wxLC_REPORT
+             wxLIST_NEXT_ALL
+             wxLIST_STATE_SELECTED
+             wxLIST_STATE_DONTCARE
+             wxLIST_STATE_FOCUSED 
+             wxIMAGE_LIST_SMALL
+             wxTheApp
+             wxVERTICAL
+             wxALIGN_CENTER
+             wxHORIZONTAL
+             wxALL
+             wxGROW
+             wxWHITE
+             wxSWISS 
+             wxNORMAL
+             wxBOLD
+             wxBITMAP_TYPE_PNG
+         /;
+use Wx::Event qw/
+                    EVT_LIST_BEGIN_DRAG
+                    EVT_LIST_ITEM_SELECTED
+                    EVT_SIZE
+                /;
+         
+use base qw/Wx::ListCtrl Class::Accessor::Fast/;
+__PACKAGE__->mk_accessors( 
+    qw/
+          prevItemCount
+          imagenames
+          imagelist
+          wx_imagelist
+          image_size
+          arrange_items
+          styles
+          insert_items
+          initialize
+          columns
+          change_display_mode
+          wx_img
+          item_refresh
+      / 
+);
+use Data::Dumper;
+
+
+sub new {
+    my( $class, $params ) = @_;
+
+  
+    my( $self ) = $class->SUPER::new(
+        $params->{parentwnd},
+        -1,
+        wxDefaultPosition,
+        [ -1, -1],
+    );
+    
+    $self->wx_img(
+        Wx::ImageList->new( 16, 16, 1 )
+    );
+    $self->wx_img->Add(
+        Wx::Bitmap->new( wxTheApp->resource_path('image.png'), wxBITMAP_TYPE_PNG )    
+    );
+
+    $self->imagelist(
+        $params->{imagelist}
+    );
+    # bitmap container for photo selection
+    $self->wx_imagelist(
+        $params->{wx_imagelist}||$self->imagelist->wx_thumb_imglist
+    );
+
+    $self->image_size(
+        $params->{image_size}
+    );
+
+    $self->columns(
+        $params->{columns}
+    );
+
+    $self->prevItemCount(-1);
+
+
+    EVT_LIST_BEGIN_DRAG( $self, $self, \&OnBeginDrag);
+
+    EVT_SIZE($self, sub {
+            my ( $this, $event ) = @_;
+    
+            $this->arrange_items(1);
+            $event->Skip();
+        }
+    );
+    
+    Wx::Event::EVT_IDLE(
+        $self,
+        sub {
+            my ($self, $event)=@_;
+
+            if($self->arrange_items){
+                $self->Refresh; 
+                $self->arrange_items(0);
+            }
+            if($self->change_display_mode){
+                my $dm = $self->imagelist->display_mode;
+                   $self->initialize->{$dm}->($self) if exists $self->initialize->{$dm};
+                $self->Refresh; 
+                $self->change_display_mode(0);
+            }
+            $event->Skip;
+        }
+    );
+
+    # manages empty panel position
+    Wx::Event::EVT_PAINT( $self, sub {
+            my ( $self, $event ) = @_;
+            if(exists $self->{_empty_panel}){
+                my ($w, $h) = $self->GetSizeWH;
+                my ($x, $y) = $self->GetPositionXY;
+                my ($wp, $hp) = $self->{_empty_panel}->GetSizeWH;
+                my $x_off = ($w-$wp)/3 > 0 ? ($w-$wp)/3 : 0;
+                my $y_off = ($h-$hp)/3 > 0 ? ($h-$hp)/3 : 0;
+                $self->{_empty_panel}->Move(
+                    [ $x+$x_off, $y+$y_off ]
+                );
+            }
+            $event->Skip;
+        }
+    );
+
+    
+    $self->initialize(
+        {
+
+            'Thumbnail' => sub {  my ( $self ) = @_;
+                                $self->Freeze;
+                                $self->ClearAll;
+                                $self->SetSingleStyle(wxLC_ICON);
+                                $self->SetSingleStyle(wxLC_EDIT_LABELS, 0);
+                                $self->SetImageList( $self->wx_imagelist, wxIMAGE_LIST_NORMAL ) ;
+                                $self->Thaw;
+                     },            
+            'Thumbnail and caption' => sub {  my ( $self ) = @_;
+                                $self->Freeze;
+                                $self->ClearAll;
+                                $self->SetSingleStyle(wxLC_ICON);
+                                $self->SetSingleStyle(wxLC_EDIT_LABELS);
+                                $self->SetImageList( $self->wx_imagelist, wxIMAGE_LIST_NORMAL ) ;
+                                $self->Thaw;
+                     },            
+             'Property list' => sub { my ( $self ) = @_;
+                                my $i=0;
+                                
+                                $self->Freeze;
+                                $self->ClearAll;
+                                $self->SetSingleStyle(wxLC_REPORT);
+                                $self->SetSingleStyle(wxLC_EDIT_LABELS);
+                                $self->SetImageList( $self->wx_img, wxIMAGE_LIST_SMALL ) ;
+                                map    {
+                                    $self->InsertColumn($i, $_->{label});
+                                    $i++;
+                                }@{$self->columns};                                
+                                $self->Thaw;
+                            },
+        }
+    );
+
+    $self->item_refresh(
+        {
+            'Thumbnail' => sub {},
+            'Thumbnail and caption' => sub { my ( $self, $index ) = @_;
+                                        my $image = $self->imagelist->GetImage($index);
+                                        $self->SetItem(
+                                            $index,
+                                            0,
+                                            $image->site_name,
+                                        ) if defined $image;
+                                    },
+            'Property list' => sub { my ( $self, $index ) = @_;
+                                my $col = 0;
+                                my $image = $self->imagelist->GetImage($index);
+                                map{
+                                    $self->SetItem(
+                                        $index,
+                                        $col,
+                                        $image->$_
+                                    ) if defined $image;
+                                    $self->SetColumnWidth($col, -1);
+                                    $col++;
+                                }
+                                qw/site_name site_comment site_author file create_date/;
+                            },
+        }
+    );
+    
+    $self->insert_items(
+        {
+            'Thumbnail' => sub { my ( $self, $index ) = @_; $self->InsertImageItem($index, $index);},
+            'Thumbnail and caption' => sub { my ( $self, $index ) = @_;
+                                           $self->InsertImageStringItem(
+                                               $index,
+                                               $self->imagelist->GetImage($index)->site_name,
+                                               $index,
+                                           );
+                                     },
+            'Property list' => sub { my ( $self, $index ) = @_;
+                                       
+                                $self->InsertImageStringItem(
+                                    $index,
+                                    "",
+                                    0
+                                );
+                                $self->ItemRefresh($index);
+
+                            },
+        }
+    );
+
+    
+    $self->initialize->{$self->imagelist->display_mode}->($self) if exists $self->initialize->{$self->imagelist->display_mode};
+
+    $self->init_empty_msg;
+
+    $self;
+}
+
+sub ItemRefresh {
+    my ( $self, $index ) = @_;
+    
+    $self->item_refresh->{$self->imagelist->display_mode}->($self, $index) if exists $self->item_refresh->{$self->imagelist->display_mode};
+}
+
+sub OnBeginDrag {
+  my( $self, $event ) = @_;
+
+
+  my $data = Wx::TextDataObject->new( 
+      Dumper $self->GetSelectedItems 
+  );
+  my $source = Wx::DropSource->new( $self );
+  $source->SetData( $data );
+
+  $source->DoDragDrop( 1 );
+}
+
+sub GetSelectectItemsCount {
+    my ( $self ) = @_;    
+
+    scalar @{$self->GetSelectedItems};
+}
+
+sub GetSelectedItems {
+    my ( $self ) = @_;    
+
+  # find selected items
+  my $item = -1;
+  my $items = [];
+  while(1) {
+      $item = $self->GetNextItem(
+          $item,      
+          wxLIST_NEXT_ALL,
+          wxLIST_STATE_SELECTED
+      );
+      last if(-1 == $item);
+      
+      # item is selected    
+      push @$items, $item
+  }
+
+  $items;
+}
+
+sub GetAllItems {
+    my ( $self ) = @_;    
+
+  # find selected items
+  my $item = -1;
+  my $items = [];
+  while(1) {
+      $item = $self->GetNextItem(
+          $item,      
+          wxLIST_NEXT_ALL,
+          wxLIST_STATE_DONTCARE
+      );
+      last if(-1 == $item);
+      
+      # item is selected    
+      push @$items, $item
+  }
+  
+  $items;
+    
+}
+
+
+sub Refresh {
+    my ( $self ) = @_;    
+
+   $self->Freeze();
+   $self->DeleteAllItems;
+   eval {
+       my $y0 = 0;
+       my $x0 = 0;
+
+       my $x_spacing = $self->image_size + 2;
+       my $y_spacing = $self->image_size + 2;
+       my $ipr = floor(($self->GetClientSize->GetWidth - 0.20*$x_spacing)/$x_spacing)||1;
+       for( my $i = 0 ; $i < $self->wx_imagelist->GetImageCount ; $i++){
+            # call the method corresponding to the display mode
+            my $indx = $self->insert_items->{$self->imagelist->display_mode}->($self, $i);
+            if( 'Thumbnail' eq $self->imagelist->display_mode){
+                my $row = floor($i/$ipr);
+                my $col = $i%$ipr;
+                $self->SetItemPosition(
+                    $i,
+                    Wx::Point->new(
+                        $x0 + $x_spacing*$col,
+                        $y0 + $y_spacing*$row,
+                    ),
+                );
+            }
+       }   
+   };
+
+   map{
+       $self->SelectItem(
+           $_
+       );
+       
+       $self->EnsureVisible($_);
+   } @{$self->imagelist->image_selection||[]};
+
+   $self->Thaw();
+   $self->SetFocus;
+}
+
+sub SelectItem {
+    my ( $self, $index ) = @_;
+
+    $self->SetItemState(
+        $index,
+        wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED,
+        wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED
+    );    
+}
+
+sub OnEmpty {
+    my ( $self ) = @_;
+
+    $self->_OnEmptyLayout;
+
+}
+
+sub OnNotEmpty {
+    my ( $self ) = @_;
+
+    $self->{_empty_panel}->Show(0) if exists $self->{_empty_panel};
+}
+
+sub _OnEmptyLayout {
+
+    my( $self ) = @_;
+    $self->{_empty_panel}->Show(1);
+
+}
+
+sub add_button {
+    my ( $self ) = @_;
+
+    $self->{_add_bt};
+}
+
+sub init_empty_msg {
+
+    my ( $self ) = @_;
+    # add a panel
+    my $empty_panel = Wx::Panel->new($self, -1, wxDefaultPosition, wxDefaultSize);
+    my( $item0 ) = Wx::BoxSizer->new( wxVERTICAL );
+    
+    my $fb = Wx::Font->new( 12, wxSWISS, wxNORMAL, wxBOLD );
+    my $fn = Wx::Font->new( 12, wxSWISS, wxNORMAL, wxNORMAL );
+
+    my( $item1 ) = Wx::StaticText->new( $empty_panel, -1, gettext("Drag photos here to get started"), wxDefaultPosition, wxDefaultSize, 0 );
+    $item1->SetFont($fb);
+    $item0->AddWindow( $item1, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    my( $item2 ) = Wx::BoxSizer->new( wxHORIZONTAL );
+    
+    my( $item3 ) = Wx::StaticText->new( $empty_panel, -1, gettext("Or click"), wxDefaultPosition, wxDefaultSize, 0 );
+    $item3->SetFont($fn);
+    $item2->AddWindow( $item3, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    my $icon1 = Wx::Icon->new();
+    eval {
+        $icon1->LoadFile(
+            wxTheApp->resource_path('tb_add.png'),
+            wxBITMAP_TYPE_PNG
+        );
+    };
+    my $bmp = Wx::Bitmap->new( $icon1 );
+
+    my( $item4 ) = Wx::BitmapButton->new( $empty_panel, -1, $bmp, wxDefaultPosition, wxDefaultSize );
+    $item2->AddWindow( $item4, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    my( $item5 ) = Wx::StaticText->new( $empty_panel, -1, gettext("to choose files on your computer"), wxDefaultPosition, wxDefaultSize, 0 );
+    $item5->SetFont($fn);
+    $item2->AddWindow( $item5, 0, wxALIGN_CENTER|wxALL, 5 );
+
+    $item0->Add( $item2, 0, wxALIGN_CENTER|wxALL, 0 );
+
+    $empty_panel->SetSizer( $item0 );
+    $item0->SetSizeHints( $empty_panel );
+
+    $self->{_empty_panel} = $empty_panel;
+    $self->{_add_bt} = $item4;
+    $self->{_empty_panel}->SetBackgroundColour(wxWHITE);
+
+    my ($wp, $hp) = $self->{_empty_panel}->GetSizeWH;
+
+    $self->SetMinSize( [20+$wp, -1 ]);
+
+}
+
+
+
+1;
+
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxImagePreview.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxImagePreview.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxImagePreview.pm	(revision 6108)
@@ -0,0 +1,123 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+package Uploader::GUI::wxImagePreview;
+use strict;
+use base qw/Wx::Dialog Class::Accessor::Fast/;
+use Wx qw/
+             wxDefaultPosition
+             wxDefaultSize
+             wxBG_STYLE_CUSTOM
+             wxIMAGE_QUALITY_HIGH
+             wxRESIZE_BORDER
+             wxDIALOG_EX_METAL
+             wxDIALOG_NO_PARENT
+             wxDEFAULT_DIALOG_STYLE
+             wxMAXIMIZE_BOX
+             wxMINIMIZE_BOX
+             wxSTAY_ON_TOP
+         /;
+
+__PACKAGE__->mk_accessors( 
+    qw/
+          image
+          image_size
+          caption
+      / 
+);
+use Data::Dumper;
+use Wx::Event qw/
+   EVT_PAINT
+   EVT_SIZE
+/;
+
+sub new {
+    my( $class, $params ) = @_;
+    my( $self ) = $class->SUPER::new(
+        undef,
+        -1,
+        $params->{caption},
+        wxDefaultPosition,
+        [400,300],
+             wxMAXIMIZE_BOX|
+             wxMINIMIZE_BOX|
+             wxRESIZE_BORDER|
+             wxDEFAULT_DIALOG_STYLE|
+             wxDIALOG_NO_PARENT|
+             wxSTAY_ON_TOP
+    );
+
+    $self->SetBackgroundStyle(wxBG_STYLE_CUSTOM);
+
+    Wx::InitAllImageHandlers();
+
+    EVT_SIZE($self, sub {
+            my ( $this, $event ) = @_;
+    
+            $this->Refresh;
+            $event->Skip();
+        }
+    );
+
+
+  EVT_PAINT(
+      $self, 
+      sub { 
+          my ( $this, $event ) = @_;
+
+          my $dc = Wx::AutoBufferedPaintDC->new($this);
+          if($this->image){
+      
+              my ($w, $h) = $this->GetSizeWH;
+              my $p_prop = $w / $h;
+      
+              # calculation made to keep aspect           
+              # ratio and maximize image size
+      
+              my $scale;
+              my ($img_w, $img_h) = @{$this->image_size};
+              return unless $img_w;
+              return unless $img_h;
+
+              my $img_prop = $img_w / $img_h;
+      
+              $scale = ($p_prop > $img_prop)
+              ? ($h / $img_h)
+              : ($w / $img_w);
+      
+              $scale = 1 if($scale > 1);
+      
+              my ($sw, $sh) = map({$_ * $scale} $img_w, $img_h);
+              my $bmp = Wx::Bitmap->new($this->image->Scale($sw, $sh, wxIMAGE_QUALITY_HIGH));
+              my $xoff = ($w - $sw) / 2;
+              my $yoff = ($h - $sh) / 2;
+              $dc->DrawBitmap($bmp, $xoff, $yoff, $dc->Clear ? 1:1);
+          }
+          else{
+              $dc->Clear;
+          }
+      }
+  );
+
+  
+  $self;
+}
+
+
+1;
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxImageProcessingProgressDlg.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxImageProcessingProgressDlg.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxImageProcessingProgressDlg.pm	(revision 6108)
@@ -0,0 +1,157 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+package Uploader::GUI::wxImageProcessingProgressDlg;
+use strict;
+use Wx qw/
+             wxDefaultSize
+             wxDefaultPosition
+             wxID_CANCEL
+             wxID_OK
+             wxGREEN
+             wxDIALOG_NO_PARENT
+             wxDEFAULT_DIALOG_STYLE
+             wxMAXIMIZE_BOX
+             wxMINIMIZE_BOX
+         /;
+use base qw/Wx::Dialog Class::Accessor::Fast/;
+use Wx::Event qw/
+                    EVT_UPDATE_UI
+                    EVT_BUTTON
+                /;
+
+__PACKAGE__->mk_accessors( 
+    qw/
+           btok
+           gauge
+           progress
+           processing
+           txtprocessing
+           processing_details
+           txtprocessing_details
+           image
+           cancelled
+           bt_close_label
+           stop_processing
+      / 
+);
+use Carp;
+
+sub new {
+    my ($this, $params) = @_;
+    #on recupere le nom de la classe en fonction du type d'appel de la méthode.
+    my $class = ref($this) || $this;
+
+
+    my $self = $class->SUPER::new(
+        undef, 
+        -1,
+        $params->{title},
+        wxDefaultPosition,
+        wxDefaultSize,
+             wxDIALOG_NO_PARENT|
+             wxDEFAULT_DIALOG_STYLE|
+             wxMAXIMIZE_BOX|
+             wxMINIMIZE_BOX
+
+    );
+    # load controls
+    eval {
+      &main::ProcessingProgress($self, 1);
+
+    $self->_initEventHandlers();
+    
+    $self->btok( $self->FindWindow($main::ID_PROGRESS_OK) );
+    $self->gauge( $self->FindWindow($main::ID_PROGRESS_GAUGE) );
+    $self->txtprocessing( $self->FindWindow($main::ID_PROGRESS_TXT) );
+    $self->txtprocessing_details( $self->FindWindow($main::ID_PROGRESS_TXT2) );
+    $self->image( $self->FindWindow($main::ID_STATICBITMAP) );
+    $self->gauge->SetForegroundColour(wxGREEN);
+    };
+
+    $self->btok->SetLabel(
+        $params->{bt_label}||'Cancel'
+    );
+    $self->bt_close_label(
+        $params->{bt_close_label}||'Close'
+    );
+
+    $self->stop_processing(
+        $params->{stop_processing}
+    );
+
+    if($@){
+        Wx::LogMessage("Error during dialogbox initialization");
+    }
+    $self;    
+}
+
+
+sub _initEventHandlers {
+    my ( $self ) = @_;
+    
+    EVT_BUTTON( $self, $main::ID_PROGRESS_OK, \&OnOK );
+    
+	
+}
+
+# Update progress information
+sub LogProgress {
+    my ( $self ) = @_;
+    
+    croak "Cancelled by user\n" if $self->cancelled;    
+   
+    $self->txtprocessing->SetLabel(
+        $self->processing
+    );
+    $self->txtprocessing_details->SetLabel(
+        $self->processing_details
+    );
+    $self->gauge->SetValue(
+        $self->progress 
+    );
+}
+
+sub DisplayEndInfo {
+    my ( $self, $msg ) = @_;
+
+    $self->txtprocessing->SetLabel(
+        $msg
+    );
+    $self->image->Show(0);
+    $self->gauge->Show(0);
+    # for i18n
+    $self->btok->SetLabel(
+        $self->bt_close_label
+    );
+	
+    $self->txtprocessing_details->SetLabel("");
+}
+
+sub OnOK {
+    my ( $self, $event ) = @_;
+    
+    $self->cancelled(1);
+    $self->stop_processing->();
+    $self->Hide;
+ 
+}
+
+
+1;
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxImageReuploadDlg.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxImageReuploadDlg.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxImageReuploadDlg.pm	(revision 6108)
@@ -0,0 +1,94 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+package Uploader::GUI::wxImageReuploadDlg;
+use strict;
+use Wx qw/
+             wxDefaultSize
+             wxDefaultPosition
+             wxID_CANCEL
+             wxID_OK
+             wxSTAY_ON_TOP
+         /;
+#use base qw/Wx::Dialog Class::Accessor::Fast Uploader::GUI::DlgCommon/;
+use base qw/Wx::Dialog Uploader::GUI::DlgCommon/;
+use Wx::Event qw/
+                    EVT_BUTTON
+                    EVT_CLOSE
+                /;
+
+use Carp;
+
+sub new {
+    my ($this, $params) = @_;
+    #on recupere le nom de la classe en fonction du type d'appel de la méthode.
+    my $class = ref($this) || $this;
+
+
+    my $self = $class->SUPER::new( undef, -1, $params->{title}, wxDefaultPosition, wxDefaultSize, wxSTAY_ON_TOP);
+    # load controls
+    eval {
+      &main::Reupload($self, 1);
+
+        $self->properties(
+            $params->{properties}
+        );
+        $self->InitLabels();
+        $self->SetProperties();
+        $self->_initEventHandlers();
+
+        if($@){
+            Wx::LogMessage("Error during dialogbox initialization");
+        }
+    };
+
+    $self;    
+}
+
+
+
+sub _initEventHandlers {
+    my ( $self ) = @_;
+    
+    EVT_BUTTON( $self, $main::ID_REUPLOAD_OK, \&OnOK );
+    EVT_CLOSE( $self, \&OnClose );
+}
+
+
+sub OnOK {
+    my ( $self, $event ) = @_;
+    
+    $self->_close;
+}
+
+sub OnClose {
+    my ( $self, $event ) = @_;
+    
+    $self->_close;
+}
+
+sub _close {
+    my ( $self ) = @_;
+
+    $self->GetProperties();
+        
+    $self->Destroy;
+}
+
+1;
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxImageView.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxImageView.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxImageView.pm	(revision 6108)
@@ -0,0 +1,49 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+package Uploader::GUI::wxImageView;
+use Wx qw/wxDefaultPosition wxDefaultSize wxLC_ICON wxIMAGE_LIST_NORMAL wxLC_LIST
+                                       wxSUNKEN_BORDER wxLC_EDIT_LABELS/;
+use base qw/Wx::ListCtrl/;
+use strict;
+
+sub new {
+    my ( $class, $parentwnd, $images ) = @_;
+
+
+    my $self = $class->SUPER::new( $parentwnd, -1, wxDefaultPosition, wxDefaultSize, wxLC_LIST|
+                                       wxSUNKEN_BORDER|wxLC_EDIT_LABELS );
+    $self->SetSingleStyle( wxLC_ICON );
+    $self->Initialize($images);
+    
+    return $self;
+}
+
+sub Initialize {
+    my ( $self, $images ) = @_;	
+
+    $self->AssignImageList( $images, wxIMAGE_LIST_NORMAL );
+
+    for( my $i = 0 ; $i < $images->GetImageCount ; $i++ ) {
+        my $idx = $self->InsertStringImageItem( $i, "Item $i", $i % 5 );
+        $self->SetItemData( $idx, $i );
+   }
+}
+
+1;
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxLoginDlg.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxLoginDlg.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxLoginDlg.pm	(revision 6108)
@@ -0,0 +1,138 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+package Uploader::GUI::wxLoginDlg;
+use strict;
+use Wx qw/
+             wxDefaultSize
+             wxDefaultPosition
+             wxID_CANCEL
+             wxID_OK
+             wxGREEN
+         /;
+use base qw/Wx::Dialog Class::Accessor::Fast/;
+use Wx::Event qw/
+                    EVT_BUTTON
+                /;
+
+__PACKAGE__->mk_accessors( 
+    qw/
+           btok
+           url
+           username
+           password
+           use_offline
+      / 
+);
+
+
+sub new {
+    my ($this, $params) = @_;
+    #on recupere le nom de la classe en fonction du type d'appel de la méthode.
+    my $class = ref($this) || $this;
+
+
+    my $self = $class->SUPER::new( undef, -1, $params->{title}, wxDefaultPosition, wxDefaultSize);
+    # load controls
+    &main::Login($self, 1);
+
+    $self->use_offline(
+        $params->{use_offline}
+    );
+    
+    $self->url(
+        $params->{site_url}
+    );
+
+    $self->username(
+        $params->{site_username}
+    );
+
+    $self->password(
+        $params->{site_password}
+    );
+
+    $self->_initEventHandlers();
+    
+    $self->btok( $self->FindWindow($main::ID_PWG_OK) );
+
+    $self->FindWindow($main::ID_PWG_URL)->SetValue(
+        $self->url->()
+    );
+    
+    
+    $self->FindWindow($main::ID_PWG_USERNAME)->SetValue(
+        $self->username->() 
+    );
+    
+    $self->FindWindow($main::ID_PWG_PASSWORD)->SetValue( 
+        $self->password->() 
+    );
+      
+    $self;    
+}
+
+
+sub _initEventHandlers {
+    my ( $self ) = @_;
+    
+    EVT_BUTTON( $self, $main::ID_PWG_OK, \&OnLoginOK );
+    EVT_BUTTON( $self, $main::ID_PWG_CANCEL, \&OnLoginCancel );
+    EVT_BUTTON( $self, $main::ID_PWG_OFFLINE, \&OnLoginOffline );
+    
+	
+}
+
+sub OnLoginOffline {
+    my ( $self, $event ) = @_;
+
+    $self->use_offline->(1);
+       	
+    $self->EndModal(2);
+}
+
+
+sub OnLoginOK {
+    my ( $self, $event ) = @_;
+    
+    $self->url->(
+        $self->FindWindow($main::ID_PWG_URL)->GetValue    
+    );
+
+    $self->username->(
+        $self->FindWindow($main::ID_PWG_USERNAME)->GetValue
+    );
+    
+    $self->password->(
+        $self->FindWindow($main::ID_PWG_PASSWORD)->GetValue
+    );
+
+    $self->EndModal(1);
+}
+
+sub OnLoginCancel {
+    my ( $self, $event ) = @_;
+    
+    
+    $self->EndModal(0);
+ 
+}
+
+
+1;
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxPhotoProperties.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxPhotoProperties.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxPhotoProperties.pm	(revision 6108)
@@ -0,0 +1,163 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+package Uploader::GUI::wxPhotoProperties;
+use strict;
+use Wx qw/
+             wxDefaultSize
+             wxDefaultPosition
+             wxTAB_TRAVERSAL 
+             wxID_CANCEL
+             wxID_OK
+             wxGREEN
+         /;
+use base qw/Wx::Panel Uploader::GUI::DlgCommon/;
+use Wx::Event qw/
+                    EVT_BUTTON
+                    EVT_CLOSE
+                /;
+use Wx::Locale qw/:default/;
+use Carp;
+use Data::Dumper;
+
+sub new {
+    my ($this, $params) = @_;
+    #on recupere le nom de la classe en fonction du type d'appel de la méthode.
+    my $class = ref($this) || $this;
+
+
+    my $self = $class->SUPER::new( $params->{parentwnd}, -1, wxDefaultPosition, [-1, -1], wxTAB_TRAVERSAL );
+    # load controls
+    &main::PhotoPropertiesCategoriesTags( $self, $params->{categories} );
+
+    $self->_initNotebook($params->{tags});
+
+
+    $self->properties(
+        $params->{properties}
+    );
+
+    $self->InitLabels();
+    $self->InitChoices();
+    $self->SetProperties();
+    $self->InitHandler();
+    $self->_initEventHandlers();
+
+    if($@){
+        Wx::LogMessage("Error during dialogbox initialization");
+    }
+
+
+    $self;    
+}
+
+
+
+sub _initEventHandlers {
+    my ( $self ) = @_;
+    
+    EVT_BUTTON( $self, $main::ID_REUPLOAD_OK, \&OnOK );
+    EVT_CLOSE( $self, \&OnClose );
+    
+}
+
+
+sub _initNotebook{
+    my ( $self, $tags ) = @_;
+
+    my $nb = $self->FindWindow(
+        $main::PHOTO_PROPERTIES_NB
+    );
+
+    my( $page1 ) = Wx::Panel->new( $nb, -1 );
+    &main::photo_properties_caption_comments( $page1, 0 );
+    $nb->AddPage( $page1, "Photo informations" );
+
+    my( $page2 ) = Wx::Panel->new( $nb, -1 );
+    &main::photo_properties_tags( $page2, $tags );
+    $nb->AddPage( $page2, "Tags" );
+
+    $self->{notebook} = $nb;
+
+}
+
+
+sub OnOK {
+    my ( $self, $event ) = @_;
+    
+    $self->_close;
+}
+
+sub OnClose {
+    my ( $self, $event ) = @_;
+	
+	$self->_close;
+}
+
+sub _close {
+    my ( $self ) = @_;
+
+    $self->GetProperties();
+
+    $self->Destroy;
+}
+
+
+sub SetEnabled {
+    my ( $self ) = @_;
+
+    $self->{_properties_notebook}->Enable(1);
+}
+
+sub SetDisabled {
+    my ( $self ) = @_;
+
+    $self->{_properties_notebook}->Enable(0);
+}
+
+sub IsEnabled {
+    my ( $self ) = @_;
+
+    $self->{_properties_notebook}->IsEnabled;
+}
+
+
+sub SetMultiSelectionMode {
+    my ( $self, $count ) = @_;
+
+    $self->{_multi_selection_mode_panel}{_text1}->SetLabel(
+        sprintf(gettext("You have selected a batch of %s photos"), $count )
+    );
+
+    $self->{_multi_selection_mode_panel}{_text2}->SetLabel(
+        gettext("Changes apply to the whole batch")
+    );
+
+    $self->{_multi_selection_mode_panel}->Show(1);
+    $self->Layout;
+}
+
+
+sub SetSingleSelectionMode {
+    my ( $self ) = @_;
+
+    $self->{_multi_selection_mode_panel}->Show(0);
+    $self->Layout;
+}
+1;
Index: /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxPropertyListDlg.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxPropertyListDlg.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/GUI/wxPropertyListDlg.pm	(revision 6108)
@@ -0,0 +1,110 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+package Uploader::GUI::wxPropertyListDlg;
+use strict;
+use Wx qw/
+             wxDefaultSize
+             wxDefaultPosition
+             wxLIST_AUTOSIZE
+             wxDEFAULT_DIALOG_STYLE
+             wxMAXIMIZE_BOX
+             wxMINIMIZE_BOX
+             wxLC_NO_HEADER
+         /;
+use Wx::Locale qw/:default/;
+use base qw/Wx::Dialog Uploader::Object2/;
+
+use Data::Dumper;
+__PACKAGE__->mk_accessors(     
+    qw/
+        properties
+        list
+      /
+);
+
+
+
+sub new {
+    my ($this, $params) = @_;
+    #on recupere le nom de la classe en fonction du type d'appel de la méthode.
+    my $class = ref($this) || $this;
+
+
+    my $self = $class->SUPER::new( 
+        undef,
+        -1,
+        $params->{caption}, 
+        wxDefaultPosition, 
+        wxDefaultSize, 
+        wxDEFAULT_DIALOG_STYLE|
+        wxMAXIMIZE_BOX|
+        wxMINIMIZE_BOX
+    );
+
+    &main::image_prop_exif($self);
+
+    $self->properties(
+        $params->{properties}
+    );
+    $self->list(
+        $self->FindWindow($main::IMG_PROP_EXIF_LIST)
+    );
+
+    $self->list->SetSingleStyle(wxLC_NO_HEADER);
+
+    $self->{img_exif_prop_close} = $self->FindWindow($main::IMG_PROP_EXIF_CLOSE);
+
+    $self->{img_exif_prop_close}->SetLabel(
+        gettext("Close")
+    );
+
+    Wx::Event::EVT_BUTTON( $self, $self->{img_exif_prop_close}, \&OnClose );
+
+    $self->list->InsertColumn(0, gettext("Property"));
+    $self->list->InsertColumn(1, gettext("Value"));
+    
+    $self;
+}
+
+
+sub Refresh {
+    my ( $self ) = @_;
+
+    $self->list->Freeze;
+    $self->list->DeleteAllItems;
+    my $i=0;
+    map {
+        $self->list->InsertStringItem($i, $_->{label});
+        $self->list->SetItem($i, 1, $_->{value}->());
+        $i++;
+    }@{$self->properties};
+    $self->list->SetColumnWidth(0, wxLIST_AUTOSIZE );
+    $self->list->SetColumnWidth(1, wxLIST_AUTOSIZE );
+    $self->list->Thaw;
+}
+
+# call to destroy crashes with GTK
+sub OnClose {
+    my ( $self, $event ) = @_;
+    
+    $self->Hide;
+}
+
+1;
Index: /extensions/pLoader/tags/1.6/src/Uploader/Image.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/Image.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/Image.pm	(revision 6108)
@@ -0,0 +1,74 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+package Uploader::Image;
+use strict;
+use base qw/Uploader::Object/;
+
+__PACKAGE__->mk_accessors(
+    qw/
+        file
+        wx_thumb_file
+        site_high_file
+        site_name
+        site_resized_file
+        site_thumb_file
+        site_author
+        site_comment
+        site_original_filename
+        exif_metadata
+        add_rank
+        site_categories
+        site_tags
+        file_sum
+		width
+		height
+		privacy_level
+        caption
+    /
+);
+
+sub Init {
+    my ( $self ) = @_;
+
+}
+
+sub exif_tag {
+    my ( $self, $tag ) = @_;
+	
+    my $exif = $self->exif_metadata ;
+    
+    $exif->{$tag};	
+}
+
+sub create_date {
+    my ( $self, $date ) = @_;
+    
+    my $exif = $self->exif_metadata ;
+   
+    $self->{-create_date} ||= $exif->{CreateDate};
+	
+    $self->{-create_date} = $date if defined $date;
+
+	$self->{-create_date};
+}
+
+
+
+1;
Index: /extensions/pLoader/tags/1.6/src/Uploader/ImageList.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/ImageList.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/ImageList.pm	(revision 6108)
@@ -0,0 +1,1615 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+package Uploader::ImageList;
+use strict;
+use Carp;
+use base qw/Uploader::Object/;
+use Image::ExifTool qw(:Public);
+use Image::Magick;
+use File::Spec;
+use Uploader::Image;
+use Data::Dumper;
+use Storable;
+use Digest::MD5::File qw/file_md5_hex md5_hex/;
+use Wx::Locale qw/:default/;
+use Wx qw/wxTheApp/;
+
+# this class implements a collection of image files with associated data
+$|=1;
+__PACKAGE__->mk_accessors( 
+    qw/
+                thumb_size
+                preview_ratio
+                categories
+                type
+                filter
+                blur
+                quality
+                resize_w
+                resize_h
+                hd_filter
+                hd_blur
+                hd_quality
+                hd_w
+                hd_h
+                hd_interlace
+                prefix
+                author
+                count
+                new_files
+                storable_file
+                wx_thumb_size
+                current_image
+                images
+                image_selection
+                exif_metadata
+                wx_thumb_imglist
+                wx_thumb_dir
+                site_resized_dir
+                site_thumb_dir
+                userdata_dir
+                progress_msg
+                last_error_msg
+                default_caption
+                default_caption_pattern
+                SetNewFilesViewerRefreshCallback
+                SetNewFilesProgressCallback
+                SetNewFilesDisplayEndInfoCallback
+                YieldCallback
+                UploadImagesViewerCallback
+                progress_thumbnail_refresh
+                progress_msg_details_refresh
+                progress_msg_refresh
+                progressbar_refresh
+                progress_endinfo_refresh
+                ResizeCallback
+                upload_rejects
+                pwg
+                upload_high
+                upload_hd
+                remove_uploaded_from_selection
+                wx_quality
+                th_quality
+                auto_rotate
+                interlace
+                create_resized
+                use_exif_preview
+                image_sums
+                upload_image_sums
+                sums
+                version
+                imagelist_version
+                uploaded_images
+                watermark_activate
+                watermark_activate_pwg_high
+                watermark_text
+                watermark_text_size
+                watermark_position
+                watermark_y
+                watermark_x
+                watermark_color
+                gravity
+                rgbcolor
+                upload_msg
+                upload_selection_count
+                upload_uploaded_count
+                upload_rejected_count
+                upload_last_error
+                upload_error_content
+                upload_begin_time
+                upload_end_time
+                upload_duration
+                upload_file
+                upload_name
+                ReuploadCallback
+                reupload_action_files
+                reupload_action_properties
+                reupload_action_properties_m
+                reupload_not_ask
+                display_mode
+                stop_processing
+                image_selection_tags
+                image_selection_privacy_level
+                image_selection_name
+                image_selection_comment
+                image_selection_author
+                image_selection_create_date
+                thumbnail_shape_square
+     /
+);
+
+
+sub Init {
+    my ( $self ) = @_;
+    
+    $self->image_selection([]) if !defined $self->image_selection;
+    $self->uploaded_images([]);
+    $self->gravity(
+        { 
+            'Top'          => 'North',
+            'Left'         => 'West',
+            'Right'        => 'East',
+            'Bottom'       => 'South',
+            'Top left'     => 'NorthWest',
+            'Top right'    => 'NorthEast',
+            'Bottom left'  => 'SouthWest',
+            'Bottom right' => 'SouthEast',
+            'Center'       => 'Center',
+       }   
+    );    
+
+    $self->rgbcolor(
+        {
+            "White" => '#FFFFFF',
+            "Black" => '#000000',
+        }    
+    );
+    
+    $self->image_selection_tags(
+        []
+    ) unless defined $self->image_selection_tags;
+}
+
+sub _set_exif_tag {
+    my ( $self, $file, $tag, $newValue ) = @_;    
+
+  my $options = {};
+  # Create a new Image::ExifTool object
+  my $exifTool = new Image::ExifTool;
+
+  # Extract meta information from an image
+  $exifTool->ExtractInfo($file, $options);
+
+  # Set a new value for a tag
+  $exifTool->SetNewValue($tag, $newValue);
+
+  # Write new meta information to a file
+  $exifTool->WriteInfo($file);
+
+}
+
+
+sub _set_current_image_filepaths {
+    my ( $self ) = @_;
+
+    my $filename = sprintf(
+        "%s.%s",
+        $self->current_image->file_sum,
+        $self->type,
+    );
+
+
+    $self->current_image->wx_thumb_file( 
+        File::Spec->catfile(
+            $self->wx_thumb_dir,
+            $filename
+        )
+    );
+
+    $self->current_image->site_thumb_file( 
+        sprintf("%s.%s",
+            File::Spec->catfile(
+                $self->site_thumb_dir,
+                'thumbnail'
+            ),
+            $self->type
+        )
+    );
+
+}
+
+
+sub SetCurrentImage {
+    my ( $self, $indx ) = @_;    
+
+    $self->current_image(
+        $indx != -1 ? $self->GetImage($indx) : Uploader::Image->new()
+    );
+}
+
+
+sub SetNewFiles {
+    my ( $self, $files ) = @_;
+
+    $self->stop_processing(0);
+
+    $self->new_files( $files );
+
+    # if some files have been previously selected 
+    my $i = scalar @{$self->sums};
+    #printf("SetNewFiles %s\n", $i);
+    my $count = 0;
+    $self->count($count);
+    my $errors = 0;
+
+    foreach my $file ( @{$files} ) {
+        my $info = $self->_read_exif_metatdata($file->{ANSIPathName});
+           my $is_new_image = $self->_add_image($file, $info, $i);    
+        $self->SetCurrentImage($i);
+        $self->_set_current_image_filepaths();
+
+        if($is_new_image){
+            #my $use_wx_resize = $self->_create_gui_preview($info);
+            $self->_create_gui_thumbnail();
+
+            # ok
+            if(!$@){
+                $self->progress_msg(gettext("Selection thumbnail created for %s"));
+            }
+            else {
+                $self->progress_msg("An error has occured when processing %s\n$@");
+                # remove from list
+                splice @{$self->sums}, $i, 1;
+                $errors++;
+            }
+        
+            $self->SetNewFilesProgressCallback->();
+        }
+        $i++;
+        $count++;
+        $self->count($count);
+        $self->SetNewFilesViewerRefreshCallback->();
+        last if $self->stop_processing;
+    }
+
+    $self->SetNewFilesDisplayEndInfoCallback->(
+        sprintf(
+            "%s : %s\n\n%s : %s",
+            gettext("photos added to the selection"),
+            $self->count,
+            gettext("errors"),
+            $errors,
+            
+        ),
+        $errors
+    );
+    
+    $self->Store;
+    
+}
+
+sub _read_exif_metatdata {
+    my ( $self, $file ) = @_;
+    
+    # read exif metadata
+    my $info;
+    eval {
+        $info = ImageInfo( $file );
+    };
+    $info = {} if($@);
+    
+    $info;
+}
+
+# key is file path
+sub _add_image {
+    my ( $self, $file, $info, $i ) = @_;    
+
+    my $is_new_image;
+
+    # for legacy imagelist that do not have image_sums property
+    $self->image_sums(
+        {}
+    ) if !$self->image_sums;
+
+    my $sum = file_md5_hex($file->{ANSIPathName});
+
+    my $image;
+    if ( !exists $self->image_sums->{$sum} ){
+        #print "_add_image ", Dumper $file, "\n";
+        # append to image list
+        $image = Uploader::Image->new(
+        {
+                file              => $file->{ANSIPathName},
+                file_sum          => $sum,
+                site_name         => $self->init_default_caption($file->{PathName}, $info, $i),
+                caption           => $self->default_caption,
+                site_author       => $self->author,
+                exif_metadata     => $self->_select_exif_data($info),
+                add_rank          => $i,
+                site_categories   => [],
+                site_tags         => [],
+                site_high_file    => $file->{ANSIPathName},
+            }
+        );
+
+        $self->image_sums->{$sum} = $image ;
+        $is_new_image = 1;
+    } else {
+        $image = $self->image_sums->{$sum};
+    }
+
+        
+    $self->sums->[$i] = $sum ;
+
+    $is_new_image;
+}
+
+
+sub init_default_caption {
+    my ( $self, $file, $info, $i ) = @_;
+
+    my $create_date = $info->{CreateDate};
+
+    $self->init_caption_from_pattern(
+        $file,
+        $create_date,
+        $i,
+        $self->default_caption,
+        $self->default_caption_pattern
+    );
+}
+
+
+sub init_caption_from_pattern {
+    my ( $self, $file, $create_date, $i, $caption, $pattern ) = @_;
+
+    my ( $yyyy, $mm, $dd, $hh, $mi, $ss ) = split /[:\s]/, $create_date ;
+  
+    my $chrono = join('', $yyyy, $mm, $dd);
+
+    my $caption_from_pattern;
+    my $ext;
+    my ( $vol, $path, $filename ) = File::Spec->splitpath($file);
+    ( $filename, $ext ) = split /\.\w+$/, $filename;
+    
+
+    if('Caption' eq $pattern){
+        $caption_from_pattern = $caption
+    }
+    elsif('File name' eq $pattern){
+        $caption_from_pattern = $filename
+    }
+    elsif('File path and name' eq $pattern){
+        $caption_from_pattern = sprintf(
+            "%s", 
+            File::Spec->catfile($path, $filename), 
+        )        
+    }    
+    elsif('Caption + rank number' eq $pattern){
+        $caption_from_pattern = sprintf(
+            "%s %s", 
+            $caption, 
+            1+$i,
+        )        
+    }    
+    elsif('Rank number + caption' eq $pattern){
+        $caption_from_pattern = sprintf(
+            "%s %s", 
+            1+$i,
+            $caption, 
+        )        
+    }    
+    elsif('Caption + create date chrono' eq $pattern){
+        $caption_from_pattern = sprintf(
+            "%s %s", 
+            $caption, 
+            $chrono,
+        )        
+    }    
+    elsif('Create date chrono + caption' eq $pattern){
+        $caption_from_pattern = sprintf(
+            "%s %s", 
+            $chrono,
+            $caption, 
+        )        
+    }
+    elsif('Create date chrono + rank' eq $pattern){
+        $caption_from_pattern = sprintf(
+            "%s %s", 
+            $chrono,
+            1+$i, 
+        )        
+    }
+    elsif('Rank + create date chrono' eq $pattern){
+        $caption_from_pattern = sprintf(
+            "%s %s", 
+            1+$i, 
+            $chrono,
+        )        
+    }
+
+    $caption_from_pattern;
+}
+
+
+sub GetCurrentImageCaption {
+    my ( $self, $index, $pattern ) = @_;
+
+    $pattern = wxTheApp->eng_caption_patterns->{$pattern};
+
+    $self->SetCurrentImage($index);
+
+    my $img = $self->current_image;
+
+    $self->init_caption_from_pattern(
+        $img->file,
+        $img->create_date,
+        $index,
+        $self->current_image->caption,
+        $pattern
+    );
+}
+
+
+sub _create_gui_thumbnail {
+    my ( $self ) = @_;
+
+     eval {
+        if(!$self->CreateGUIThumbnail())
+        {
+            $self->ResizeCallback->(
+                $self->current_image->file,
+                $self->current_image->wx_thumb_file,
+                $self->type,
+                $self->wx_thumb_size,
+                $self->wx_thumb_size,
+                $self->wx_quality,
+            );
+            
+        }
+     };
+}
+
+sub RemoveImageSelection {
+    my ( $self ) = @_;
+    
+    return if (! scalar @{$self->sums} );
+    return if (! defined $self->image_selection );
+    
+    $self->_remove_image_list($self->image_selection);
+    # clear image selection
+    $self->image_selection([]);
+}
+
+sub _remove_image_list {
+    my ( $self, $list ) = @_;
+    # the list is sorted, ascendant
+    # we reverse it to have
+    # higher first, and keep same indexes during remove
+    @$list = reverse @$list;     
+    map {
+        $self->DeleteImage($_);
+        splice @{$self->sums}, $_, 1 ;
+        $self->wx_thumb_imglist->Remove($_);
+        shift @$list;
+    }
+    @$list;
+}
+
+
+# used for display in GUI. has to fit a square box ( wxImageList )
+sub CreateGUIThumbnail {
+    my ( $self ) = @_;
+
+    my $rval = 0;
+    my $image = new Image::Magick;
+
+    my $size = $self->wx_thumb_size||100;
+
+    my $status = $image->Set(size=>sprintf("%sx%s", 2*$size, 2*$size));
+    warn "$status" if $status ;
+
+    $status = $image->ReadImage(
+        $self->current_image->file
+    );
+    warn "$status" if $status;
+    return $rval if $status;
+
+    $self->current_image->width(
+        $image->Get('width')
+    );
+    $self->current_image->height(
+        $image->Get('height')
+    );
+
+
+    # maximize size and keep aspect ratio
+    $status = $image->Thumbnail(
+        geometry=>sprintf("%s%s>", $size*$size, '@')
+    );
+    # to get adjusted to a square box
+    #$status = $image->Thumbnail(
+    #    geometry=>sprintf("%sx%s%s", $size, $size, '^')
+    #);
+    warn "$status" if $status;
+    return $rval if $status;
+
+#    causes strange behaviour with i18n -> yellow borders when local is other than EN
+#    $status = $image->Set(background=>"white");
+#    warn "$status" if $status ;
+
+    $status = $image->Set(Gravity=>"Center");
+    warn "$status" if $status ;
+
+    $image->Extent(
+        geometry=>sprintf("%sx%s", $size, $size),
+        gravity=>'center',
+    );
+    
+    $image->Set(
+        quality=>$self->wx_quality||90
+    );
+
+    $status = $image->Strip();
+    warn "$status" if $status ;
+
+    # exif from original image
+    my $orientation = $self->current_image->exif_metadata->{Orientation};
+    
+    # Valid for Rotate 180, Rotate 90 CW, Rotate 270 CW
+    if( $orientation =~ m/Rotate (\d+)/ ){
+        printf(
+            "Rotate %s\n",
+            $1
+        );
+    
+        $image->Rotate( degrees=>$1 ) if $self->auto_rotate;    
+    }
+    
+
+    $image->Write(
+        sprintf(
+            "%s:%s",
+            $self->type,
+            $self->current_image->wx_thumb_file,
+        )
+    );
+
+    undef $image;
+    
+    $rval = 1;
+    
+    return $rval;
+}
+
+
+
+
+sub CreateResized {
+    my ( $self ) = @_;
+    
+    my $rval = 1 ;
+
+
+    my $image = new Image::Magick;
+
+    my $status = $image->ReadImage(
+        $self->current_image->file
+    );
+    warn "$status" if $status ;
+    return 0 if $status;
+
+    my $w = $image->Get('width');
+    my $h = $image->Get('height');
+
+    $status = $image->Set(Gravity=>"Center");
+    warn "$status" if $status ;
+
+    # exif from original image
+    my $orientation = $self->current_image->exif_metadata->{Orientation};
+    
+    # Valid for Rotate 180, Rotate 90 CW, Rotate 270 CW
+    if( $orientation =~ m/Rotate (\d+)/ ){
+        printf(
+            "Rotate %s\n",
+            $1
+        );
+    
+        $image->Rotate( degrees=>$1 ) if $self->auto_rotate;    
+    }
+
+
+    #printf("resize with blur value %s\n", $self->blur);
+    $status = $image->Resize(
+        geometry => sprintf("%sx%s>", $self->resize_w, $self->resize_h), 
+        filter => sprintf("%s", $self->filter), 
+        blur => $self->blur
+    );
+    warn "$status" if $status ;
+    return 0 if $status;
+
+    #printf("resize with quality value %s\n", $self->quality);
+    $status = $image->Set(quality=>$self->quality);
+    warn "$status" if $status ;
+
+    $status = $image->Set(interlace=>$self->interlace);
+    warn "$status" if $status ;
+
+    $image->Write(
+        sprintf(
+            "%s:%s",
+            $self->type,
+            $self->current_image->site_resized_file,
+        )
+    );
+    warn "$status" if $status ;
+    return 0 if $status;
+    
+    undef $image;
+
+   
+    $rval = 0 if $status;
+
+    return $rval;
+}
+
+sub CreateThumbnail {
+    my ( $self ) = @_;
+    
+    #return 1 if( -e $self->current_image->site_thumb_file );
+    
+    my $rval = 1;
+
+    my $image = new Image::Magick;
+
+    my $status = $image->ReadImage(
+        $self->current_image->site_resized_file
+    );
+    warn "$status" if $status ;
+
+    my $pattern = $self->thumbnail_shape_square ?
+        "%sx%s^" :
+        "%sx%s>" ;
+    $status = $image->Resize(
+        geometry => sprintf(
+                                $pattern, 
+                                $self->thumb_size, 
+                                $self->thumb_size
+                           ),
+    );
+    warn "$status" if $status ;
+
+    $status = $image->Set(Gravity=>"Center");
+    warn "$status" if $status ;
+
+    $status = $image->Crop(
+        geometry=>sprintf("%sx%s+0+0", $self->thumb_size, $self->thumb_size)
+    ) if $self->thumbnail_shape_square;
+
+
+    $status = $image->Set(quality=>$self->th_quality);
+    warn "$status" if $status ;
+
+    $status = $image->Strip();
+    warn "$status" if $status ;
+
+
+    $image->Write(
+        sprintf(
+            "%s:%s",
+            $self->type,
+            $self->current_image->site_thumb_file,
+        )
+    );
+    
+    undef $image;
+
+
+    $rval = 0 if $status;
+
+    return $rval;
+}
+
+
+
+sub _select_exif_data {
+    my ( $self, $exif ) = @_;
+
+    return {
+        map {
+            $_ => $exif->{$_},
+        }
+        qw/
+            CreateDate
+            ImageWidth
+            ImageHeight
+            Orientation
+            DateTimeOriginal
+            ISO
+            ExposureTime
+            ApertureValue
+            FocalLength
+            Lens
+            Exposure
+            Make
+            Model
+        /
+    };    
+}
+
+sub Store {
+    my ( $self ) = @_;
+    
+    my $data = $self->get_storable(
+        [ 
+            qw/
+                images
+                thumb_size
+                preview_ratio
+                type
+                filter
+                blur
+                quality
+                wx_quality
+                th_quality
+                prefix
+                author
+                count
+                resize_w
+                resize_h
+                hd_filter
+                hd_blur
+                hd_quality
+                hd_w
+                hd_h
+                hd_interlace
+                new_files
+                storable_file
+                wx_thumb_size
+                current_image
+                exif_metadata
+                wx_thumb_dir
+                site_resized_dir
+                site_thumb_dir
+                userdata_dir
+                progress_msg
+                default_caption
+                default_caption_pattern
+                upload_high
+                upload_hd
+                remove_uploaded_from_selection
+                auto_rotate
+                interlace
+                create_resized
+                use_exif_preview
+                image_sums
+                sums
+                version
+                imagelist_version
+                watermark_activate
+                watermark_activate_pwg_high
+                watermark_text
+                watermark_text_size
+                watermark_position
+                watermark_y
+                watermark_x
+                watermark_color
+                reupload_action_files
+                reupload_action_properties
+                reupload_action_properties_m
+                display_mode
+                image_selection_tags
+                thumbnail_shape_square
+            /
+        ] 
+    
+    );
+    eval {
+        store $data, $self->storable_file;
+    };
+    if($@){
+        print $@, "\n";    
+    }
+}
+
+
+
+sub UploadSelection {
+    my ( $self ) = @_;
+
+    $self->stop_processing(0);
+
+    my $viewer_callback = $self->UploadImagesViewerCallback ;
+
+    $self->image_selection([]) if !defined $self->image_selection;
+    $self->upload_rejects(
+        []
+    );
+
+    $self->count(
+        1
+    );
+
+    $self->upload_uploaded_count(0);
+    $self->upload_rejected_count(0);
+    $self->upload_begin_time(time);
+    $self->upload_selection_count(scalar @{$self->image_selection});
+    # for re-upload management
+    $self->upload_image_sums( [
+            map { $self->GetImage($_)->file_sum }
+            @{$self->image_selection}
+        ] 
+    );
+
+    # check if already exist on server
+    my $uploaded = $self->pwg->IsAlreadyUploaded($self->upload_image_sums);
+    my @already_uploaded = grep { $_ } values %$uploaded ; 
+    $self->ReuploadCallback->() if ( scalar @already_uploaded and !$self->reupload_not_ask );
+
+    
+    foreach(@{$self->image_selection}) {
+    # current image object        
+        $self->current_image(
+            $self->GetImage($_)
+        ); 
+        # prepare resized, high, thumbnail
+        # if not already uploaded
+        $self->_set_site_resized_file();
+        $self-> _set_site_high_file ();
+        # photo metadata
+        $self->_upload_selection_prepare() if (!$uploaded->{$self->current_image->file_sum} or $self->reupload_action_files);
+        $self->_prepare_upload_properties();        
+
+        # transfert resized, high, thumbnail to site
+        my $status = $self->_upload_selection_transfert();
+        # log operations
+        $self->_upload_selection_log($status);
+        $self->count(
+            1+$self->count
+        );
+        # remove thumbnail, resized
+        # to make sure everything is clean
+        # keep site_high_file because it can be the original !!!
+        $self->_remove_resized_from_cache;
+
+        last if $self->stop_processing;
+    }
+
+    $self->stop_processing(0);
+
+    if($self->remove_uploaded_from_selection){
+        $self->_remove_image_list($self->uploaded_images);
+        # clear thumbnail imagelistctrl
+        $viewer_callback->();
+    }
+
+    $self->_upload_selection_final_log();
+
+}
+
+
+sub _remove_resized_from_cache {
+    my ( $self ) = @_;
+
+    unlink $self->current_image->site_thumb_file if -e $self->current_image->site_thumb_file;
+
+    map {
+        my $file = File::Spec->catfile(
+            $self->site_resized_dir,
+            sprintf(
+                "%s.%s",
+                 $_,
+                $self->type,
+            )
+        );
+        unlink $file if -e $file;
+    } qw /resized high/;
+
+
+}
+
+sub _upload_selection_prepare {
+    my ( $self ) = @_;
+
+    $self->progress_thumbnail_refresh->();
+    # PREPARE
+    $self->_set_upload_msg(gettext("Preparing resized image for"));
+    $self->_upload_progress();
+    #printf("resized %s\n", $self->create_resized);
+    if( $self->create_resized ){
+        $self->_create_site_resized_file();
+        $self->_set_upload_msg(gettext("Resized image done for"));
+        $self->_upload_progress();
+    }
+    # the original is at the right size, no need to create a resize
+    else {
+        #printf("original no resized %s\n", $self->create_resized);
+        $self->current_image->site_resized_file(
+            $self->current_image->file,
+        );
+    }
+
+    my $decode = {
+        'No' => 0,
+        'Yes, use HD resized of the original photo' => 'HD',
+        'Yes, use a copy of the original photo' => 'ORIGINAL',
+    };    
+    #printf("upload HD %s\n", $self->upload_hd);
+    $self->upload_high(
+        $decode->{$self->upload_hd}
+    );
+    #printf("upload High %s\n", $self->upload_high);
+    
+    # if upload high, rotate a copy of original file
+    if($self->upload_high){
+        $self->CreateHigh();
+        $self->_set_upload_msg(gettext("HD image done for"));
+        $self->_upload_progress();
+    }
+
+    eval {
+        $self->CreateThumbnail();
+    };
+    $self->_set_upload_msg(gettext("Thumbnail image done for"));
+    $self->_upload_progress();
+
+
+}
+
+sub _upload_progress {
+    my ( $self, $value ) = @_;
+
+    eval {
+        $self->progress_msg_refresh->(
+            $self->upload_msg
+        );
+    };
+    # user cancelled : dialog box is destroyed
+    croak gettext("Upload cancelled"), " .", $@ if $@ ;
+
+
+}
+
+sub _set_upload_msg {
+    my ( $self, $msg, $errmsg ) = @_;
+
+    $self->upload_msg(
+        sprintf(
+            "%s : %s - %s\n\n%s %s %s %s\n%s",
+            $msg,
+            $self->upload_file,
+            $self->upload_name,
+            gettext("Photo"),
+            $self->count,
+            gettext("on"),
+            $self->upload_selection_count,
+            $errmsg
+        )
+    );
+}
+
+sub _upload_selection_transfert {
+    my ( $self ) = @_;
+
+    return if $self->stop_processing;
+
+    $self->_set_upload_msg(gettext("Uploading"));
+    $self->_upload_progress(0);
+
+    # UPLOAD
+    my ( $status, $status_msg, $content ) = $self->pwg->UploadImage(
+        { 
+            yield           => $self->YieldCallback, 
+            bar             => $self->progressbar_refresh, 
+            msg             => $self->progress_msg_refresh,
+            msg_details     => $self->progress_msg_details_refresh,
+            resized_msg     => gettext("Uploading resized"),
+            thumbnail_msg   => gettext("Uploading thumbnail"),
+            highdef_msg     => gettext("Uploading high definition"),
+            checksum_msg    => gettext("Checksum for"),
+            original_sum    => $self->current_image->file_sum,
+            stop_processing => $self->stop_processing,
+        } 
+    );
+    my $ok = 0;
+    # HTTP REQUEST OK
+    if ( $status ){
+        # PIWIGO RESULT ( HTTP may be ok while Piwigo is not )
+        $ok = 'fail' eq $content->{stat} ? 0 : 1;
+    }
+    else{
+        Wx::LogMessage(
+            "%s %s : %s",
+            gettext("Communication error with"),
+            $self->pwg->site_url,
+            $status_msg,
+        );
+    }
+    $self->upload_last_error(
+        $status_msg
+    );
+
+    $self->upload_error_content(
+        $content
+    );
+
+    $ok;
+}
+
+sub _upload_selection_log {
+    my ( $self, $ok ) = @_;
+
+    if($ok){
+        $self->_set_upload_msg(gettext("Uploaded"));
+        $self->_upload_progress(0);
+        push @{$self->uploaded_images}, $_;
+        $self->upload_uploaded_count(
+            1+$self->upload_uploaded_count        
+        );
+    } else {
+        $self->_set_upload_msg(gettext("An error has occured"), Dumper($self->upload_error_content));
+        $self->upload_rejected_count(
+            1+$self->upload_rejected_count
+        );
+    }    
+        
+}
+
+sub _upload_selection_final_log {
+    my ( $self ) = @_;
+
+    $self->upload_end_time(time);
+    $self->upload_duration(
+        $self->upload_end_time - $self->upload_begin_time
+    );
+
+    $self->progress_endinfo_refresh->(
+        sprintf(
+            "%s : %s\n\n%s : %s\n\n%s : %s\n\n\n%s : %s %s",
+            gettext("images processed"),
+            $self->count - 1,
+            gettext("images uploaded"),
+            $self->upload_uploaded_count,
+            gettext("images in errors and not uploaded"),
+            $self->upload_rejected_count,
+            gettext("Duration"),
+            $self->upload_duration,
+            gettext("seconds"),
+        )
+    );
+}
+
+sub _set_site_resized_file {
+    my ( $self ) = @_;
+
+    my ( $vol, $dir, $file ) = File::Spec->splitpath(
+        $self->current_image->file
+    );
+
+    $self->upload_file(
+        $file
+    );
+        
+    $self->upload_name(
+        $self->current_image->site_name
+    );
+    my $filename = $self->current_image->file_sum ;
+
+    # lately defined to make sure we have the last global properties ( resize_w, resize_h )
+    $self->current_image->site_resized_file( 
+        File::Spec->catfile(
+            $self->site_resized_dir,
+            sprintf(
+                "%s.%s",
+                'resized',
+                $self->type,
+            )
+        )
+    );
+    printf("_set_site_resized_file %s\n", $self->current_image->site_resized_file);
+}
+
+sub _create_site_resized_file {
+    my ( $self ) = @_;
+
+    eval {
+        if(!$self->CreateResized()){
+            $self->_create_resized_fallback();
+        };
+
+        $self->_set_exif_tag(
+            $self->current_image->site_resized_file,
+            'Orientation',
+            'Horizontal (normal)',
+        ) if $self->auto_rotate;
+
+        $self->CreateWatermark(
+            $self->watermark_text,
+            $self->watermark_text_size,
+            $self->watermark_position,
+            $self->watermark_x,
+            $self->watermark_y,
+            $self->watermark_color,
+            $self->current_image->site_resized_file
+        ) if $self->watermark_activate;
+    }
+}
+
+sub _create_resized_fallback {
+    my ( $self ) = @_;
+    # use wx builtin rescale if IM fails
+    printf("CreateResized failed %s. Use ResizeCallback\n", $@);
+    # use method provided by the caller
+    # source, target, type, ratio, width, $height
+    $self->ResizeCallback->(
+        $self->current_image->file,
+        $self->current_image->site_resized_file,
+        $self->type,
+        $self->resize_w,
+        $self->resize_h,
+        $self->quality,
+    );
+                
+    $self->RotateImage(
+        $self->current_image->site_resized_file,
+    ) if $self->auto_rotate;
+}
+
+# if we need to rotate
+sub CreateHigh {
+    my ( $self ) = @_;
+
+    #printf("CreateHigh %s\n", $self->upload_high);
+    my $bModifyOriginal;
+    my $bRotate;
+    my $bAddWatermark;
+    my $bResize;
+    my $orientation = $self->current_image->exif_metadata->{Orientation};
+    my $degrees;
+    
+    # Valid for Rotate 180, Rotate 90 CW, Rotate 270 CW
+    if( $self->auto_rotate and $orientation =~ m/Rotate (\d+)/ ){
+        $bModifyOriginal = 1;
+        $bRotate = 1;
+        $degrees = $1;
+    }
+
+    if( $self->watermark_activate_pwg_high ){
+        $bModifyOriginal = 1;
+        $bAddWatermark = 1;
+    }
+    
+    # HD resize
+    if('HD' eq $self->upload_high){
+        $bModifyOriginal = 1;
+        $bResize = 1;
+    }
+
+    if($bModifyOriginal){
+
+        my $image = Image::Magick->new();
+        # we read original
+        my $status = $image->Read(
+            $self->current_image->file
+        );
+        warn "$status ", $self->current_image->file, "\n" if $status ;
+        return 0 if $status;
+
+        if($bRotate){
+            $image->Rotate( degrees=>$degrees );    
+        }        
+        $image->Write(
+            $self->current_image->site_high_file
+        );
+        warn "$status ", $self->current_image->site_high_file, "\n" if $status ;
+        return 0 if $status;
+
+        if($bResize){
+            $status = $image->Resize(
+                geometry => sprintf("%sx%s>", $self->hd_w, $self->hd_h), 
+                filter => sprintf("%s", $self->hd_filter), 
+                blur => $self->hd_blur
+            );
+            warn "$status" if $status ;
+            return 0 if $status;
+        }
+        
+        #printf("resize with quality value %s\n", $self->quality);
+        $status = $image->Set(quality=>$self->quality);
+        warn "$status" if $status ;
+
+        $status = $image->Set(interlace=>$self->interlace);
+        warn "$status" if $status ;
+        
+        
+        undef $image;
+
+        if($bAddWatermark){
+          my $file_out = $self->current_image->site_high_file;
+          $self->CreateWatermark(
+             $self->watermark_text,
+                $self->watermark_text_size,
+                $self->watermark_position,
+                $self->watermark_x,
+                $self->watermark_y,
+                $self->watermark_color,
+                $file_out
+            );
+        }
+
+
+        $self->_set_exif_tag(
+            $self->current_image->site_high_file,
+            'Orientation',
+            'Horizontal (normal)',
+        );
+
+        # Now all images that need to be rotated are done. Update exif
+        $self->current_image->exif_metadata->{Orientation} = 'Horizontal (normal)';
+
+
+    }
+    else{
+        # high file is the original file
+        $self->current_image->site_high_file(
+            $self->current_image->file
+        );
+        #printf("site high file %s\n", $self->current_image->site_high_file);
+    }
+
+    return 1;
+}
+
+# file name for original copy
+# we do not need the original file name
+sub _set_site_high_file {
+        my ( $self ) = @_;
+
+        my ( $vol, $dir, $file ) = File::Spec->splitpath(
+            $self->current_image->file
+        );
+        
+        $self->current_image->site_original_filename(
+            $file
+        );
+        my ( $filename, $ext ) = split /\./, $file ;
+    
+        # high_file is a resized of original
+        $self->current_image->site_high_file( 
+            File::Spec->catfile(
+                $self->site_resized_dir,
+                sprintf(
+                    "%s.%s",
+                     'high',
+                    $self->type,
+                )
+            )
+        );
+}
+
+
+
+sub CreateWatermark {
+    my ( $self, $text, $text_size, $position, $x, $y, $color, $file_out ) = @_;
+    
+    my $rval = 1 ;
+    my $gravity = $self->gravity->{$position};
+    my $fill = $self->rgbcolor->{$color};
+
+    # debug
+    #printf("Create watermark %s\n", $file_out);
+
+    
+
+    my $image = new Image::Magick;
+    
+    my $status = $image->ReadImage(
+        $file_out
+    );      
+
+    my $ratio = $image->Get('height')/($self->resize_h||$image->Get('height'));
+    $ratio||=1;
+    $text ||="Your watermark";
+    $image->Annotate(
+        pointsize => $text_size*$ratio,
+        fill => $fill,
+        x => $x*$ratio,
+        y => $y*$ratio,
+        text => $text,
+        gravity => $gravity,
+    );
+                      
+    $image->Write(
+        sprintf(
+            "%s:%s",
+            $self->type,
+            $file_out,
+        )
+    );
+}
+
+sub _prepare_upload_properties {
+    my ( $self ) = @_;
+
+    # set default values only if not defined
+    # || operator is not used because 0 is a choice value
+    # and would replace a valid choice with a default value
+    $self->reupload_action_files(1) 
+        unless defined $self->reupload_action_files;
+
+    $self->pwg->reupload_action_properties(1)
+        unless defined $self->pwg->reupload_action_properties;
+
+    $self->pwg->reupload_action_properties_m(1)
+        unless defined $self->pwg->reupload_action_properties_m;
+
+    $self->pwg->reupload_action_files(
+        $self->reupload_action_files
+    );
+    $self->pwg->reupload_action_properties(
+        $self->reupload_action_properties
+    );
+
+    $self->pwg->reupload_action_properties_m(
+        $self->reupload_action_properties_m
+    );
+    
+    $self->pwg->upload_high(
+        $self->upload_high
+    );
+
+    $self->pwg->site_high_file(
+        $self->current_image->site_high_file
+    );
+
+    $self->pwg->site_original_filename(
+        $self->current_image->site_original_filename
+    );
+
+
+    $self->pwg->site_resized_file(
+        $self->current_image->site_resized_file
+    );
+
+    $self->pwg->site_thumb_file(
+        $self->current_image->site_thumb_file
+    );
+
+    $self->pwg->site_author(
+        $self->current_image->site_author
+    );
+
+    $self->pwg->site_comment(
+        $self->current_image->site_comment
+    );
+
+    $self->pwg->site_image_name(
+        $self->current_image->site_name
+    );
+
+    $self->pwg->site_img_date_creation(
+        substr($self->current_image->create_date, 0, 10)
+    );
+
+    $self->pwg->privacy_level(
+        $self->current_image->privacy_level
+    );
+    
+    $self->current_image->site_categories(
+        $self->categories
+    );
+
+    $self->pwg->categories(
+        sprintf(
+            "%s",
+            join(';', @{$self->categories})
+        )
+    );
+
+    $self->pwg->site_tags(
+        join(',', @{$self->current_image->site_tags})
+    );
+
+    
+}
+
+# read Orientation exif tag from original image
+# apply rotation to $file image
+sub RotateImage {
+    my ( $self, $file ) = @_;
+    
+    # exif from original image
+    my $orientation = $self->current_image->exif_metadata->{Orientation};
+
+    # Valid for Rotate 180, Rotate 90 CW, Rotate 270 CW
+    if( $orientation =~ m/Rotate (\d+)/ ){
+        printf(
+            "Rotate %s\n",
+            $1
+        );
+
+        my $image = Image::Magick->new();
+        
+        # read resized file
+        my $status = $image->Read(
+            $file
+        );
+        warn "$status ", $file, "\n" if $status ;
+        return 0 if $status;
+    
+        $image->Rotate( degrees=>$1 );    
+        
+        # write resized file
+        $image->Write(
+            $file
+        );
+        warn "$status ", $file, "\n" if $status ;
+        return 0 if $status;
+        
+        undef $image;
+    
+    }    
+    return 1;
+}
+
+sub GetImage {
+    my ( $self, $indx ) = @_;
+    
+    my $sum = $self->sums->[$indx];
+
+    $self->image_sums->{$sum};
+}
+
+sub DeleteImage {
+    my ( $self, $indx ) = @_;
+    
+    my $sum = $self->sums->[$indx];
+
+    delete $self->image_sums->{$sum};
+}
+
+sub multi_selection_mode {
+    my ( $self ) = @_;
+
+    scalar @{$self->image_selection} > 1;
+}
+
+
+sub SetImageSelectionTags {
+    my ( $self, $tags ) = @_;
+
+    $self->image_selection_tags($tags) if 'ARRAY' eq ref $tags;
+
+    # append to each image
+    # if multiple selection
+    if($self->multi_selection_mode){
+        map {
+            # need to dedup
+            my $tags = [
+                @{$self->GetImage($_)->site_tags},
+                @{$self->image_selection_tags},
+            ];
+            #deduplicate
+            my $uniq = {
+                 map { $_ => 1 } @$tags
+            };
+            @$tags = keys %$uniq;
+            $self->GetImage($_)->site_tags(
+                $tags
+            );
+        }@{$self->image_selection};
+    }
+
+    $self->image_selection_tags;
+}
+
+
+sub SetImageSelectionPrivacyLevel {
+    my ( $self, $privacy_level ) = @_;
+
+    # append to each image
+    # if multiple selection
+    if($self->multi_selection_mode){
+        if(defined $privacy_level){
+            $self->image_selection_privacy_level($privacy_level);
+            map {
+                $self->GetImage($_)->privacy_level(
+                    $privacy_level
+                ) ;
+            }@{$self->image_selection}
+        };
+    }
+
+    $self->image_selection_privacy_level;
+}
+
+
+sub SetImageSelectionName {
+    my ( $self, $name, $param ) = @_;
+    
+    # works in single and multi selection mode
+    if(defined $name){
+        map {
+            my $_name;
+            if( 'CODE' eq ref $name ){
+                $_name = $name->($_, $param);
+            }
+            else{
+                $_name = $name;
+                $self->GetImage($_)->caption(
+                    $_name
+                ) ;
+            }
+
+            $self->image_selection_name($_name);
+            $self->GetImage($_)->site_name(
+                $_name
+            ) ;
+        }@{$self->image_selection}
+    }
+}
+
+sub SetImageSelectionAuthor {
+    my ( $self, $author ) = @_;
+
+    # append to each image
+    # if multiple selection
+    if($self->multi_selection_mode){
+        if(defined $author){
+            $self->image_selection_author($author);
+            map {
+                $self->GetImage($_)->site_author(
+                    $author
+                ) ;
+            }@{$self->image_selection}
+        };
+    }
+
+    $self->image_selection_author;
+}
+
+sub SetImageSelectionComment {
+    my ( $self, $comment ) = @_;
+
+    # append to each image
+    # if multiple selection
+    if($self->multi_selection_mode){
+        if(defined $comment){
+            $self->image_selection_comment($comment);
+            map {
+                $self->GetImage($_)->site_comment(
+                    $comment
+                ) ;
+            }@{$self->image_selection}
+        };
+    }
+
+    $self->image_selection_comment;
+}
+
+
+sub SetImageSelectionCreateDate {
+    my ( $self, $date ) = @_;
+
+    # append to each image
+    # if multiple selection
+    if($self->multi_selection_mode){
+        if(defined $date){
+            $self->image_selection_create_date($date);
+            map {
+                $self->GetImage($_)->create_date(
+                    $date
+                ) ;
+            }@{$self->image_selection}
+        };
+    }
+
+    $self->image_selection_create_date;
+}
+
+
+sub CheckUpload {
+    my ( $self ) = @_;
+
+    $self->pwg->CheckUpload;
+}
+
+1;
Index: /extensions/pLoader/tags/1.6/src/Uploader/Object.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/Object.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/Object.pm	(revision 6108)
@@ -0,0 +1,142 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+package Uploader::Object;
+use strict;
+use Data::Dumper;
+use Storable;
+use File::Slurp ; 
+use Data::Dumper;
+use base qw/
+               Class::Accessor::Fast
+           /; 
+
+# $param is a hash with :
+# key : member name
+sub new {
+    my ( $class, $params ) = @_;
+    
+    $params ||= {};
+    
+    my $self = bless $params, $class ;
+
+    # create member accessors
+    #__PACKAGE__->mk_accessors(     
+    #    keys %$params
+    #);
+    
+    
+    if(defined $self->{plugin_file}){
+    	die "Plugin file is missing." unless -e $self->{plugin_file};
+        $self->InitPlugins();
+    }
+
+    # member accessors initialization
+    eval {
+        map {
+        	$self->$_(
+        	    $params->{$_}
+        	);
+        }
+        keys %$params;
+    };
+    if($@){
+        warn $@;	
+    }
+
+    # must be defined in child class
+    $self->Init();
+
+    
+    return $self;
+}
+
+
+sub InitPlugins {
+    my ( $self ) = @_;
+    
+    my $data;
+    eval { $data = read_file( $self->{plugin_file} ); } ;
+
+    my $plugins = [] ;
+    if( defined $data){
+        my $expr = '$plugins = ' ;
+        $expr .=  "$data  " ;
+        eval $expr ;
+    }
+    # load plugins
+    
+    my $hplugins = $plugins->[0] if scalar @$plugins;
+    while( my ( $key, $value ) = each %$hplugins ) {
+    	$self->ReadParams( $value, $key);
+    }
+    
+}
+
+sub ReadParams {
+	my( $self, $file, $key ) = @_ ;
+
+	my $expr_params ;
+	eval { $expr_params = read_file( $file ); } ;
+	
+	my $paramValues = [] ;
+	if($expr_params){
+		my $expr = '$paramValues = ' ;
+		$expr .=  "$expr_params  " ;
+		eval $expr ;
+	}
+	return unless 'ARRAY' eq ref $paramValues ;
+        if($@){
+            die "Cannot load data $@";	
+        }
+	if(scalar(@$paramValues )){
+	    my $params = $paramValues->[0] ;
+	    $self->SetKeyValues($params, $key);
+	}
+}
+
+sub SetKeyValues {
+    my ( $self, $params, $key )= @_;
+    if (defined $key) {	
+        foreach( keys %$params ) {
+            $self->{$key}->{$_} = $params->{$_} ;
+        }
+    }
+    else {
+        foreach( keys %$params ) {
+            $self->{$_} = $params->{$_} ;
+        }
+    }
+}
+
+
+sub get_storable {
+    my ( $self, $keys ) = @_;	
+
+    my $data = {
+        map {
+    	    $_ => $self->{$_},
+          }
+          @$keys
+    };
+    
+    $data;
+}
+
+1;
Index: /extensions/pLoader/tags/1.6/src/Uploader/Object2.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/Object2.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/Object2.pm	(revision 6108)
@@ -0,0 +1,128 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+package Uploader::Object2;
+use strict;
+
+use Data::Dumper;
+use base qw/
+               Class::Accessor::Fast
+           /; 
+
+__PACKAGE__->mk_accessors(     
+    qw/
+        accessors
+        frame_callbacks
+      /
+);
+
+
+
+
+
+
+# Set control values with accessor
+sub SetControlValues {
+    my ( $self ) = @_;
+    
+    my $accessors = $self->accessors;
+    
+    # accessor_name => [ sub {}, control_id ]
+    map {
+    	my $control_id = $_;
+        $self->SetControlValue($control_id);
+   }
+    keys %$accessors;
+}
+
+
+
+sub GetControlValue {
+    my( $self, $control_id ) = @_;
+
+    my $ctrl = $self->FindWindow($control_id) ;
+    my $accessor = $self->accessors->{$control_id};
+
+    # to execute the right method
+    my $method = {
+        'Wx::TextCtrl' => sub { 
+        	              $accessor->(
+        	                  $ctrl->GetValue()
+        	              );
+                          },	
+        'Wx::StaticText' => sub { 
+        	              $accessor->(
+        	                  $ctrl->GetLabel()
+        	              );
+                          },	
+        'Wx::StaticBitmap' => sub { 
+        	              $accessor->(
+        	                  $ctrl->GetBitmap()
+        	              );
+                          },	
+        'Wx::RadioBox' => sub { 
+        	              $accessor->(
+        	                  $ctrl->GetSelection()
+        	              );
+                          },	
+    };
+
+
+    eval {
+        $method->{ref $ctrl }->();
+    };
+}
+
+
+
+sub SetControlValue {
+    my( $self, $control_id ) = @_;
+
+    my $ctrl = $self->FindWindow($control_id) ;
+    my $accessor = $self->accessors->{$control_id};
+
+
+    # to execute the right method
+    my $method = {
+        'Wx::TextCtrl' => sub { 
+        	              $ctrl->ChangeValue(
+        	                  $accessor->()
+        	              );
+                          },	
+        'Wx::StaticText' => sub { 
+        	              $ctrl->SetLabel(
+        	                  $accessor->()
+        	              );
+                          },	
+        'Wx::StaticBitmap' => sub { 
+        	              $ctrl->SetBitmap(
+        	                  $accessor->()
+        	              );
+                          },	
+        'Wx::RadioBox' => sub { 
+        	              $ctrl->SetSelection(
+        	                  $accessor->()
+        	              );
+                          },	
+    };
+    eval {
+        $method->{ref $ctrl }->();
+    };
+}
+1;
Index: /extensions/pLoader/tags/1.6/src/Uploader/PWG.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/PWG.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/PWG.pm	(revision 6108)
@@ -0,0 +1,83 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+package Uploader::PWG;
+use strict;
+use Data::Dumper;
+use Uploader::PWG::WebServices;
+use Uploader::PWG::Categories;
+use base qw/
+           Uploader::Object
+           Class::Accessor::Fast
+           Uploader::PWG::WebServices
+           Uploader::PWG::Categories
+           /;
+
+__PACKAGE__->mk_accessors( 
+    qw/
+           site_url
+           site_username
+           site_password
+           http_username
+           http_password
+           branding
+           use_offline
+           version
+      / 
+);
+
+$|=1;
+
+
+sub Init {
+    my ( $self ) = @_;
+
+    # for web services    
+    $self->SUPER::Init( $self->version );
+
+    if($self->use_offline){
+        $self->categories([]);
+    }
+    else{
+        $self->GetMethods;
+        $self->RefreshCategories;
+        $self->RefreshTags;
+    }
+}
+
+sub RefreshCategories {
+    my ( $self ) = @_;
+
+    $self->categories(
+        $self->prepare_items(
+            $self->GetCategories
+        )
+    );
+}
+
+sub RefreshTags {
+    my ( $self ) = @_;
+
+    $self->tags(
+        $self->GetTags
+    );
+}
+
+
+1;
Index: /extensions/pLoader/tags/1.6/src/Uploader/PWG/Categories.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/PWG/Categories.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/PWG/Categories.pm	(revision 6108)
@@ -0,0 +1,126 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+package Uploader::PWG::Categories;
+use strict;
+use Data::Dumper;
+use Wx::Locale qw/:default/;
+use base qw/
+           Uploader::Object
+           Class::Accessor::Fast
+           /;
+
+# create a list of tree items
+sub prepare_items {
+    my ( $self, $categories ) = @_;
+
+
+    my $records = {};    
+
+    # lookup by id
+    # every node is a parent
+    map {
+        $records->{$_->{id}} = _record( $_ );
+    }
+    @$categories;
+
+    # find the parent
+    # sort by global rank, descending
+    # to make sure children come before their parents
+    map {
+        my $child = $records->{$_};
+        my $parentid = _parentid($child);
+        if(defined $parentid){
+            _addchild( 
+                $records->{$parentid}, 
+                $child
+            );
+            delete $records->{$_};	
+        }
+    }
+    sort { $records->{$b}->[7] cmp $records->{$a}->[7] }
+    keys %$records;
+
+    return [
+        [
+            $self->branding->{Categories},
+            undef,
+            -1,
+            0,
+            -1,
+            
+        ],
+        sort { $a->[6] <=> $b->[6] } values %$records,
+    ];
+}
+
+sub _parentid {
+    my ( $record ) = @_;
+    
+    $record->[5];
+}
+
+
+sub _addchild {
+    my ( $record, $child ) = @_;
+    
+    $record->[1] ||= [];
+    
+    my $children = $record->[1];
+    
+    push @$children, $child;
+    
+    # sort by rank 	
+    @$children = sort { $a->[6] <=> $b->[6] } @$children;
+}
+
+sub _parent_rank {
+   my ( $category ) = @_;
+
+   my @rank = split /\./, $category->{global_rank} ;
+   my @ucats = split /,/, $category->{uppercats} ;
+
+   my $parent;
+   if( 1 < scalar @ucats ){
+       $parent = $ucats[scalar @rank - 2 ];
+   }
+   my $rank = $rank[scalar @rank - 1 ];
+   
+   return ($parent, $rank);
+}
+
+
+
+sub _record {
+    my ( $category ) = @_;
+
+    my ( $parent, $rank ) = _parent_rank($category);
+    return [
+        $category->{name},
+        undef,
+        $category,
+        1,
+        -1,
+        $parent,
+        $rank,
+        $category->{global_rank},
+    ];   
+}
+
+1;
Index: /extensions/pLoader/tags/1.6/src/Uploader/PWG/WebServices.pm
===================================================================
--- /extensions/pLoader/tags/1.6/src/Uploader/PWG/WebServices.pm	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/Uploader/PWG/WebServices.pm	(revision 6108)
@@ -0,0 +1,743 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+package Uploader::PWG::WebServices;
+ 
+use strict;
+use warnings;
+use MIME::Base64 qw(encode_base64); 
+use JSON;
+use LWP::UserAgent;
+use Data::Dumper;
+use Digest::MD5::File qw/file_md5_hex md5_hex/;
+use File::Slurp;
+use File::Spec;
+use POSIX qw(ceil floor);
+use base qw/
+           Uploader::Object
+           Class::Accessor::Fast
+           /;
+
+__PACKAGE__->mk_accessors( 
+    qw/
+           uagent
+           urlbase
+           username
+           password
+           qry_list_categories
+           qry_add_categories
+           qry_list_methods
+           qry_list_tags
+           qry_check_upload
+           items
+           tags
+           categories
+           site_original_filename
+           site_high_file
+           site_resized_file
+           site_thumb_file
+           site_image_name
+           site_tags
+           rank
+           site_author
+           site_comment
+           site_img_date_creation
+           uagent_response
+           login_result
+           action_result
+           upload_high
+           chunk_size
+           sum
+           image_id
+           typecode
+           reupload_action_files
+           reupload_action_properties
+           reupload_action_properties_m
+           single_value_mode
+           multiple_value_mode
+           privacy_level
+           is_method_available
+      / 
+);
+
+$|=1;
+
+sub Init {
+    my ( $self, $version ) = @_ ;
+
+    # to transform a type_code into a typename
+    $self->typecode(
+        {
+             file => 'file',
+             thumbnail => 'thumb',
+             high => 'high',    
+        }
+    );
+    
+    $self->single_value_mode(
+        {
+            1 => 'fill_if_empty',
+            2 => 'replace',
+        }
+    );
+
+    $self->multiple_value_mode(
+        {
+            1 => 'append',
+            2 => 'replace',
+        }
+    );
+    
+    $self->uagent(
+        LWP::UserAgent->new(
+            agent => sprintf("Mozilla/pLoader %s", $version)        
+        )
+    );
+    
+    $self->uagent->cookie_jar({});    
+
+    $self->urlbase(
+        $self->{site_url}
+    );
+    
+    $self->username(
+        $self->{site_username}
+    );
+    
+    $self->password(
+        $self->{site_password}
+    );
+    
+    $self->chunk_size(
+        $self->{chunk_size}
+    );
+
+    
+    $self->uagent->default_headers->authorization_basic(
+        $self->{http_username}||$self->username, 
+        $self->{http_password}||$self->password
+    );
+    
+    
+    $self->qry_list_categories( sprintf
+        "%s/ws.php?format=json&method=%s&recursive=%s",
+        $self->urlbase,
+#        'pwg.categories.getAdminList',
+        'pwg.categories.getList',
+        'true',
+    );
+
+    $self->qry_list_tags( sprintf
+        "%s/ws.php?format=json&method=%s",
+        $self->urlbase,
+        'pwg.tags.getAdminList',
+    );
+
+    $self->qry_list_methods( sprintf
+        "%s/ws.php?format=json&method=%s",
+        $self->urlbase,
+        'reflection.getMethodList',
+    );
+
+    $self->qry_check_upload( sprintf
+        "%s/ws.php?format=json&method=%s",
+        $self->urlbase,
+        'pwg.images.checkUpload',
+    );
+
+
+    my $form = {
+        method => 'pwg.session.login',
+        username => $self->username,
+        password => $self->password,
+    };
+ 
+    $self->_execute_post(
+        $form
+    );    
+
+    $self->login_result(
+        $self->_json_response_content
+    );
+
+}
+
+sub _json_response_content {
+    my ( $self ) = @_;
+
+    my $hresult = {} ;
+
+    if($self->uagent_response->is_success){
+        eval {
+            $hresult = from_json(
+                $self->uagent_response->content
+            );
+        };
+        if($@){
+            # when server response has warnings, the content response is not a valid json string
+            # find the json response
+            $self->uagent_response->content =~ /(\{.+\})/;
+            #printf("json response %s\n", $1);
+            eval {
+                $hresult = from_json(
+                    $1
+                );
+            };
+        }        
+    }
+    else{
+        $hresult = {
+            'message' => $self->uagent_response->message,
+            'stat'    => 'fail',
+        };
+    }
+
+    if(401 == $self->uagent_response->code){
+        $hresult->{message} = 'Access denied';
+    }
+
+    $hresult;
+}
+
+sub _execute_get {
+    my ( $self, $query ) = @_;
+
+    eval {
+        $self->uagent_response(
+            $self->uagent->get(
+                $query
+            )
+        );
+    };
+
+    if($@){
+        printf("An error occured in query execution %s\n%s",
+            $query,
+            $@,
+        );    
+    }
+}
+
+sub _execute_post {
+    my ( $self, $form ) = @_;
+
+    my $result;
+    eval {
+        $result = $self->uagent_response(
+            $self->uagent->post(
+                $self->urlbase.'/ws.php?format=json',
+                $form
+            )
+        );
+    };
+    if($@){
+        printf("An error occured in post execution %s\n%s",
+            $form->{method},
+            $@,
+        );    
+    }
+    
+    return ( $result->is_success, $result->status_line );
+}
+
+sub GetCategories {
+    my ( $self ) = @_;
+
+ 
+    $self->_execute_get(
+        $self->qry_list_categories
+    );
+    $self->_json_response_content->{result}{categories};
+}
+
+sub GetTags {
+    my ( $self ) = @_;
+
+    $self->_execute_get(
+        $self->qry_list_tags    
+    );
+    $self->_json_response_content->{result}{tags};
+}
+
+sub AddTags {
+    my ( $self, $name ) = @_;
+
+    my $form = {
+        method            => 'pwg.tags.add',
+        name              => $name,
+        
+    };
+
+    return ( $self->_execute_post($form), $self->_json_response_content );
+} 
+
+sub CheckUpload {
+    my ( $self ) = @_;
+
+    my $err_msg;
+
+    if($self->is_method_available->{'pwg.images.checkUpload'}){
+        $self->_execute_get(
+            $self->qry_check_upload
+        );
+#        my $result = $self->_json_response_content->{result};
+        my $hresult = $self->_json_response_content;
+
+        $err_msg = 'ok' eq $hresult->{stat} ?
+            $hresult->{result}{message} :
+            $hresult->{message};
+    }
+
+    $err_msg;
+}
+
+sub GetMethods {
+    my ( $self ) = @_;
+
+    $self->_execute_get(
+        $self->qry_list_methods    
+    );
+
+    my $methods = $self->_json_response_content->{result}{methods};
+
+    $self->is_method_available(
+        {}
+    );
+
+    map {
+        $self->is_method_available->{$_}++
+    }@$methods;
+
+    $methods;
+}
+
+sub UploadImage {
+    my ( $self, $progress ) = @_;
+    
+    return if $progress->{stop_processing};
+
+    $self->image_id(
+        $self->_exists($progress->{original_sum})
+    );
+
+    my $status = 1;
+    my $status_line ="OK";
+    my $content = {};
+    my $doubleCheck;
+    my $form;
+    UPLOAD: while(1){
+        # first upload
+        if(!defined($self->image_id)){ 
+            $doubleCheck = 1;
+            $self->_checksum_files($progress);
+            my @types = ('file', 'thumb');
+            #printf("WS upload_high %s\n", $self->upload_high);
+            push @types, 'high' if $self->upload_high;
+            map{
+                my $rval = $self->_send_chunks($_, $progress);
+                $status_line = $rval->{message};
+                if (!$rval->{ok}){
+                    $status = 0;
+                    last UPLOAD ;
+                }
+            } @types;
+          
+           
+            $form = {
+                method            => 'pwg.images.add',
+                original_sum      => $self->sum->{original},
+                original_filename => $self->site_original_filename,
+                file_sum          => $self->sum->{file},
+                thumbnail_sum     => $self->sum->{thumb},
+                categories        => $self->categories,
+                name              => $self->site_image_name,
+                author            => $self->site_author,
+                comment           => $self->site_comment,
+                date_creation     => $self->site_img_date_creation,
+                tag_ids           => $self->site_tags,
+                
+            };
+
+           $form->{high_sum} = $self->sum->{high} if $self->upload_high;
+           
+           $progress->{yield}->();
+           ( $status, $status_line ) = $self->_execute_post($form);
+        }
+        # re-upload
+        else{
+            # need to check if files have changed
+            # and update image info
+            if($self->reupload_action_files){
+                $self->_checksum_files($progress);
+                my $files = $self->_check_files();
+                if(defined($files)){
+                    $self->_add_files($files, $progress);    
+                }
+            }
+
+            $form = {
+                    method        => 'pwg.images.setInfo',
+                    image_id      => $self->image_id,
+            };
+            # update metadata info
+            # simple value metadata
+            if($self->reupload_action_properties){      
+                $form->{name}          = $self->site_image_name;
+                $form->{author}        = $self->site_author;
+                $form->{comment}       = $self->site_comment;
+                $form->{date_creation} = $self->site_img_date_creation;
+                $form->{single_value_mode}  = $self->single_value_mode->{$self->reupload_action_properties};
+                $form->{level} = $self->privacy_level ? 2**($self->privacy_level - 1) : 0;
+            }
+            # multi value metadata
+            if($self->reupload_action_properties_m){      
+                $form->{tag_ids} = $self->site_tags if $self->site_tags;
+                $form->{categories} = $self->categories;
+                $form->{multiple_value_mode} = $self->multiple_value_mode->{$self->reupload_action_properties_m};
+            };
+            $progress->{yield}->();
+            ( $status, $status_line ) = $self->_execute_post($form); 
+
+        }
+
+        delete $form->{tag_ids} unless defined $self->site_tags;
+        delete $form->{tag_ids} if '' eq $self->site_tags;
+
+        $progress->{yield}->();
+        # for first upload
+        # make sure the image is uploaded by querying for its existence
+        if($doubleCheck){
+            $self->image_id(
+                $self->_exists($progress->{original_sum})
+            );
+            $content->{stat} = !defined $self->image_id  ? 'fail' : 'ok'; 
+            if(defined $self->image_id and defined $self->privacy_level){
+                ( $status, $status_line, $content ) = $self->_set_privacy_level;
+            }
+        }
+
+        last UPLOAD;
+    }# UPLOAD
+    
+    return ( $status,  $status_line, $content);
+}
+
+sub _set_privacy_level {
+    my ( $self ) = @_;
+        
+    my $form = {
+        method        => 'pwg.images.setPrivacyLevel',
+        image_id      => $self->image_id,
+        level         => $self->privacy_level ? 2**($self->privacy_level - 1) : 0,
+    };
+
+    my ( $status, $status_line ) = $self->_execute_post($form); 
+    my $hresult = $self->_json_response_content;
+
+    ($status, $status_line, $hresult );
+}
+
+sub _checksum_files {
+    my ( $self, $progress ) = @_;
+
+    $self->sum(
+        {
+            file => $self->_checksum(
+                        $self->site_resized_file,
+                        $progress
+                    ),
+            thumb => $self->_checksum(
+                             $self->site_thumb_file,
+                             $progress
+                         ),
+            original => $progress->{original_sum}
+        }
+    ); 
+
+    $self->sum->{high} = $self->_checksum(
+                        $self->site_high_file,
+                        $progress
+    ) if $self->upload_high ;
+}
+
+sub _check_files {
+    my ( $self ) = @_;
+
+    my $form = {
+        method   => 'pwg.images.checkFiles',
+        image_id => $self->image_id,
+    };
+    
+    @$form{'thumbnail_sum', 'file_sum' } = (
+        $self->sum->{thumb},
+        $self->sum->{file},
+    );
+
+    if($self->upload_high){
+        $form->{high_sum} = $self->sum->{high};
+    }
+
+    $self->_execute_post($form);    
+    my $hresult = $self->_json_response_content;
+
+    my $rval = 'ok' eq $hresult->{stat} ? $hresult->{result} : undef;
+    
+    $rval;
+}
+
+# $files is returned by _check_files
+# {
+#     thumbnail => 'equals', 'differs', 'missing'
+#     file => 'equals', 'differs', 'missing'
+#     high => 'equals', 'differs', 'missing'
+#}
+
+sub _add_files {
+    my ( $self, $files, $progress ) = @_;
+
+    map{
+        $self->_add_file($_, $progress);
+    }
+    map{
+        $self->typecode->{$_};
+    } grep { 'equals' ne $files->{$_} } keys %$files ;
+        
+}
+
+sub _add_file {
+    my ( $self, $type_code, $progress ) = @_;
+
+    $self->_send_chunks(
+        $type_code,
+        $progress,
+    );
+
+    my $form = {
+        method => 'pwg.images.addFile',
+        image_id => $self->image_id,
+        type     => $type_code,
+        sum      => $self->sum->{$type_code},        
+    };    
+
+    $self->_execute_post($form);    
+    my $hresult = $self->_json_response_content;
+
+    my $rval = 'ok' eq $hresult->{stat} ? $hresult->{result} : undef;
+    
+    $rval;
+}
+
+sub IsAlreadyUploaded {
+    my ( $self, $md5_sums ) = @_;
+    
+    # md5_sums is an array ref
+    $self->_execute_post({
+        method      => 'pwg.images.exist',
+        md5sum_list => join(',', @$md5_sums)
+        }
+    );
+
+    my $sums = $self->_json_response_content->{result};
+
+    $sums;
+}
+
+sub _exists {
+    my ( $self, $md5_sum ) = @_;
+
+    my $form = {
+        method            => 'pwg.images.exist',
+        md5sum_list       => $md5_sum,
+    };
+
+    $self->_execute_post($form);    
+    my $hresult = $self->_json_response_content;
+
+    $hresult->{result} = {} if 'HASH' ne ref $hresult->{result};
+    my $id = 'ok' eq $hresult->{stat} ? $hresult->{result}{$md5_sum} : undef ;
+
+    $id;
+} 
+
+sub _checksum {
+    my ( $self, $file, $progress ) = @_;
+    my $file_sum;
+
+    my $yield = $progress->{yield};
+
+    $yield->();
+    $progress->{msg_details}->(
+        sprintf(
+            "%s : %s", 
+            $progress->{checksum_msg}, 
+            $file
+        )
+    );
+
+    eval {
+        $file_sum = file_md5_hex(
+            $file
+        );
+    };
+    $yield->();
+
+    $file_sum;
+}
+
+sub _send_chunks {
+    my ( $self, $type_code, $progress ) = @_;
+
+    my $msg = {
+        thumb=>'thumbnail_msg',
+        file=>'resized_msg',
+        high=>'highdef_msg',
+    };
+
+    my $filepath = {
+        thumb=>$self->site_thumb_file,
+        file=>$self->site_resized_file,
+        high=>$self->site_high_file,
+    };
+
+    $progress->{current_msg} = $progress->{$msg->{$type_code}};
+    $progress->{yield}->();
+
+    my $params = {
+         filepath      => $filepath->{$type_code},
+         type          => $type_code,
+         original_sum  => $self->sum->{original},
+    };
+    #print Dumper $params;
+    $self->send_chunks(
+       $params,
+       $progress,
+    );
+    $progress->{yield}->();
+
+    $params;
+}
+
+sub AddCategories{
+    my ( $self, $name, $parentid ) = @_;
+
+    my $form = {
+        method            => 'pwg.categories.add',
+        name              => $name,
+        parent            => $parentid,
+        
+    };
+    
+    return ( $self->_execute_post($form), $self->_json_response_content );
+}
+
+sub SetInfoCategories{
+    my ( $self, $name, $comment, $parentid ) = @_;
+
+    my $form = {
+        method            => 'pwg.categories.setInfo',
+        name              => $name,
+        comment           => $comment,
+        category_id       => $parentid,
+        
+    };
+
+    return ( $self->_execute_post($form), $self->_json_response_content );
+}
+
+
+sub send_chunks {
+    my ( $self, $params, $progress ) = @_;
+
+    my $yield = $progress->{yield};
+    my ( $vol, $dir, $filename ) = File::Spec->splitpath($params->{filepath});
+
+    $yield->();
+    $progress->{bar}->(0);
+    $yield->();
+    $progress->{msg_details}->(
+        sprintf(
+            "%s : %s", 
+            $progress->{current_msg}, 
+            $filename
+        )
+    );
+
+
+    $yield->();
+    my $content = read_file(
+        $params->{filepath},
+        binmode => ':raw',
+    );
+    $yield->();
+
+    my $content_length = length($content);
+    my $nb_chunks = ceil($content_length / $self->chunk_size->());
+
+    my $chunk_pos = 0;
+    my $chunk_id = 1;
+
+
+    while ($chunk_pos < $content_length) {
+
+        my $chunk = substr(
+            $content,
+            $chunk_pos,
+            $self->chunk_size->()
+        );
+        $chunk_pos += $self->chunk_size->();
+        #print "pwg.images.addChunk\n";
+        my $data = encode_base64($chunk);
+        #printf("chunk : %s, data %s\n", length $chunk, length $data);
+        my $response = $self->uagent->post(
+            $self->urlbase.'/ws.php?format=json',
+            {
+                method       => 'pwg.images.addChunk',
+                data         => $data,
+                original_sum => $params->{original_sum},
+                position     => $chunk_id,
+                type         => $params->{type},
+            }
+        );
+#print Dumper $response;
+        $yield->();
+        $progress->{bar}->(100*($chunk_pos/$content_length));
+        $progress->{msg_details}->(
+            sprintf(
+                "%s : %s", 
+                $progress->{current_msg}, 
+                $filename
+            )
+        );
+        $params->{ok} = 1;
+        if ($response->code != 200) {
+            printf("response code    : %u\n", $response->code);
+            printf("response message : %s\n", $response->message);
+            $params->{ok} = 0;
+            $params->{message} = $response->message;
+            $params->{code} = $response->code;
+            last;
+        }
+
+        $chunk_id++;
+    }
+}
+
+ 
+1;
+    
Index: /extensions/pLoader/tags/1.6/src/pLoader.exe.manifest
===================================================================
--- /extensions/pLoader/tags/1.6/src/pLoader.exe.manifest	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/pLoader.exe.manifest	(revision 6108)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+ <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+     <assemblyIdentity
+         processorArchitecture="x86"
+         version="5.1.0.0"
+         type="win32"
+         name="Controls"
+     />
+     <description>pLoader</description>
+     <dependency>
+         <dependentAssembly>
+             <assemblyIdentity
+                 type="win32"
+                 name="Microsoft.Windows.Common-Controls"        
+                 version="6.0.0.0"
+                 publicKeyToken="6595b64144ccf1df"
+                 language="*"
+                 processorArchitecture="x86"
+         />
+     </dependentAssembly>
+     </dependency>
+ </assembly>
Index: /extensions/pLoader/tags/1.6/src/pLoader.ini
===================================================================
--- /extensions/pLoader/tags/1.6/src/pLoader.ini	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/pLoader.ini	(revision 6108)
@@ -0,0 +1,7 @@
+[
+    {
+        site_url      => 'http://localhost',
+        site_username => 'username',
+        site_password => 'password',
+    }
+]
Index: /extensions/pLoader/tags/1.6/src/ploader.pl
===================================================================
--- /extensions/pLoader/tags/1.6/src/ploader.pl	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/ploader.pl	(revision 6108)
@@ -0,0 +1,75 @@
+# +-----------------------------------------------------------------------+
+# | pLoader - a Perl photo uploader for Piwigo                            |
+# +-----------------------------------------------------------------------+
+# | Copyright(C) 2008-2010 Piwigo Team                  http://piwigo.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                                          |
+# |                                                                       |
+# | 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.                                                                  |
+# +-----------------------------------------------------------------------+
+
+use strict;
+use File::Spec;
+use Wx;
+
+use Class::Accessor::Fast;
+use Uploader::GUI::wxApp;
+use Uploader::GUI::Frame;
+use Uploader::GUI::Layout::GlobalSettings;
+use Uploader::GUI::Layout::Progress;
+use Uploader::GUI::Layout::Login;
+use Uploader::GUI::Layout::Reupload;
+use Uploader::GUI::Layout::PhotoProperties;
+use Uploader::GUI::Layout::PhotoPropertiesCategoriesTags;
+use Uploader::GUI::Layout::PhotoPropertiesExif;
+use Uploader::GUI::Layout::DestinationCategory;
+use JSON;
+use Wx::Locale qw/:default/;
+use Data::Dumper;
+use File::HomeDir;
+
+$SIG{__DIE__} = \&OnDieHandler;
+
+eval {
+    my $app = Uploader::GUI::wxApp->new(
+            {
+                root_dir      => $ENV{PLOADER_ROOT}||'..',
+                resource_dir => 'res',
+                locale_dir   => 'locale',
+                argv         => [ grep { -f $_ } @ARGV ],
+            }
+    );
+    $app->SetFrame( 
+        Uploader::GUI::Frame->new(
+            {
+                title     => sprintf("pLoader - Piwigo uploader %s - [%s]", $app->version, $app->site_url),
+                pwg       => $app->pwg,
+                imagelist => $app->imagelist,
+                imageviewer_index => $app->imageviewerIndex,
+                frameLayout => $app->frameLayout,
+            }
+        )
+    );
+    $app->MainLoop();
+};
+
+sub OnDieHandler {
+    my ( $exception ) = @_;
+    
+    # if triggered in eval
+    # return if $^S;
+    print $exception;
+}
+1;
+
+
Index: /extensions/pLoader/tags/1.6/src/properties.ini
===================================================================
--- /extensions/pLoader/tags/1.6/src/properties.ini	(revision 6108)
+++ /extensions/pLoader/tags/1.6/src/properties.ini	(revision 6108)
@@ -0,0 +1,28 @@
+thumbnail_size    => 120,
+thumbnail_quality => 90,
+wx_thumbnail_size => 100,
+wx_thumbnail_quality => 90,
+resize_w          => 640,
+resize_h          => 480,
+resize_filter     => 'Lanczos',
+resize_blur       => 0.9,
+resize_quality    => 95,
+resize_interlace  => 'Line',
+auto_rotate       => 1,
+upload_hd         => 'No',
+hd_filter         => 'Lanczos',
+hd_blur           => 0.9,
+hd_quality        => 95,
+hd_w              => 1600,
+hd_h              => 1200,
+hd_interlace      => 'Line',
+remove_uploaded_from_selection => 1,
+create_resized    => 1,
+default_caption_pattern => 'File name',
+default_caption => gettext('Photo '),
+watermark_text => gettext("my watermark"),
+watermark_text_size => 12,
+watermark_position => 'Center',
+watermark_y => 10,
+watermark_x => 10,
+watermark_color => 'White',
