Index: /extensions/PiwigoLib/PiwigoLib/DTO/PwgServiceException.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoLib/DTO/PwgServiceException.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoLib/DTO/PwgServiceException.cs	(revision 7150)
@@ -0,0 +1,51 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Com.Piwigo.Lib.IService;
+
+namespace Com.Piwigo.Lib.DTO
+{
+    public sealed class PwgServiceException : ApplicationException 
+    {
+        public Int32 NumeroErr { get; private set; }
+        public String MessageErr { get; private set; }
+
+        private static String Defaut_Message = "A PwgServiceException occurs...";
+        public PwgServiceException() 
+            : base(Defaut_Message)
+        {
+            NumeroErr = 0;
+            MessageErr = String.Empty;
+        }
+
+        public PwgServiceException(String message)
+            : base(Defaut_Message + " " + message)
+        {
+            NumeroErr = 0;
+            MessageErr = String.Empty;
+        }
+
+        public PwgServiceException(String message, Exception innerEx)
+            : base(Defaut_Message + " " + message, innerEx)
+        {
+            NumeroErr = 0;
+            MessageErr = String.Empty;
+        }
+
+        public PwgServiceException(String message, Int32 NumErr, String MsgErr)
+            : base(Defaut_Message + " " + message)
+        {
+            NumeroErr = NumErr;
+            MessageErr = MsgErr;
+        }
+
+        public PwgServiceException(String message, Int32 NumErr, String MsgErr, Exception innerEx)
+            : base(Defaut_Message + " " + message, innerEx)
+        {
+            NumeroErr = NumErr;
+            MessageErr = MsgErr;
+        }
+
+    }
+}
Index: /extensions/PiwigoLib/PiwigoLib/IService/IPwgCategoriesService.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoLib/IService/IPwgCategoriesService.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoLib/IService/IPwgCategoriesService.cs	(revision 7150)
@@ -0,0 +1,12 @@
+﻿using System;
+namespace Com.Piwigo.Lib.IService
+{
+    public interface IPwgCategoriesService
+    {
+        bool AddCategory(string categoryName, int? upperCatId, ref int newId, ref string messageInfo);
+        System.Collections.Generic.List<Com.Piwigo.Lib.DTO.PwgCategory> GetAdminListOfCategory();
+        System.Collections.Generic.List<Com.Piwigo.Lib.DTO.PwgCategory> GetListOfCategory(int? CatgeroryId, bool? Recursive, bool? PublicOnly);
+        System.Collections.Generic.List<Com.Piwigo.Lib.DTO.PwgImage> GetListOfImagesFormCategory(int categoryId, bool? recursive, int? perPage, int? Page, int? Order, int? minRate, int? maxRate, int? minHit, int? maxHit, DateTime? minDateAvailable, DateTime? maxDateAvailable, DateTime? minDateCreated, DateTime? maxDateCreated, int? minRatio, int? maxRatio, bool? withThumbnail, ref int PageReturned, ref int PerPageeReturned, ref int CountReturned);
+        bool UpdateCategoryInfo(int IdCat, string categoryName, string categoryComment);
+    }
+}
Index: /extensions/PiwigoLib/PiwigoLib/IService/IPwgImagesService.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoLib/IService/IPwgImagesService.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoLib/IService/IPwgImagesService.cs	(revision 7150)
@@ -0,0 +1,8 @@
+﻿using System;
+namespace Com.Piwigo.Lib.IService
+{
+    public interface IPwgImagesService
+    {
+        Com.Piwigo.Lib.DTO.PwgImageRate RateImage(int imageId, int imageRate);
+    }
+}
Index: /extensions/PiwigoLib/PiwigoLib/IService/IPwgSessionService.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoLib/IService/IPwgSessionService.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoLib/IService/IPwgSessionService.cs	(revision 7150)
@@ -0,0 +1,10 @@
+﻿using System;
+namespace Com.Piwigo.Lib.IService
+{
+    public interface IPwgSessionService
+    {
+        Com.Piwigo.Lib.DTO.PwgSession GetPwgSession();
+        Com.Piwigo.Lib.DTO.PwgSession Login(string UserName, string Password);
+        Com.Piwigo.Lib.DTO.PwgSession Logout();
+    }
+}
Index: /extensions/PiwigoLib/PiwigoLib/IService/IPwgSetupService.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoLib/IService/IPwgSetupService.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoLib/IService/IPwgSetupService.cs	(revision 7150)
@@ -0,0 +1,8 @@
+﻿using System;
+namespace Com.Piwigo.Lib.IService
+{
+    public interface IPwgSetupService
+    {
+        void Setup(string PwgUserAgent, short? PwgTimeOutInSecond, Uri serverURI);
+    }
+}
Index: /extensions/PiwigoLib/PiwigoLib/IService/IPwgTagsService.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoLib/IService/IPwgTagsService.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoLib/IService/IPwgTagsService.cs	(revision 7150)
@@ -0,0 +1,11 @@
+﻿using System;
+namespace Com.Piwigo.Lib.IService
+{
+    public interface IPwgTagsService
+    {
+        bool AddTag(string tagName, ref int newId, ref string messageInfo);
+        System.Collections.Generic.List<Com.Piwigo.Lib.DTO.PwgTag> GetAdminListOfTag();
+        System.Collections.Generic.List<Com.Piwigo.Lib.DTO.PwgImage> GetListOfImagesFormTags(System.Collections.Generic.List<int> tagsId, System.Collections.Generic.List<string> tagsUrlName, System.Collections.Generic.List<string> tagsName, bool? tagModeAnd, int? perPage, int? Page, int? Order, int? minRate, int? maxRate, int? minHit, int? maxHit, DateTime? minDateAvailable, DateTime? maxDateAvailable, DateTime? minDateCreated, DateTime? maxDateCreated, int? minRatio, int? maxRatio, bool? withThumbnail, ref int PageReturned, ref int PerPageeReturned, ref int CountReturned);
+        System.Collections.Generic.List<Com.Piwigo.Lib.DTO.PwgTag> GetListOfTag(bool? sortedByCounter);
+    }
+}
Index: /extensions/PiwigoLib/PiwigoLib/IService/PwgServiceProvider.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoLib/IService/PwgServiceProvider.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoLib/IService/PwgServiceProvider.cs	(revision 7150)
@@ -0,0 +1,97 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Com.Piwigo.Lib.Service;
+
+namespace Com.Piwigo.Lib.IService
+{
+    public sealed class PwgServiceProvider
+        {
+            static readonly PwgServiceProviderBase _instance = new PwgServiceProviderBase();
+
+            // Explicit static constructor to tell C# compiler
+            // not to mark type as beforefieldinit
+            static PwgServiceProvider()
+            {
+            }
+
+            public static PwgServiceProviderBase Instance
+            {
+                get
+                {
+                    return _instance;
+                }
+            }
+
+            public class PwgServiceProviderBase
+            {
+                private IPwgCategoriesService _pwgCategoriesService;
+                public IPwgCategoriesService PwgCategoriesService
+                {
+                    get
+                    {
+                        if (_pwgCategoriesService == null)
+                        {
+                            _pwgCategoriesService = new PwgCategoriesService();
+                        }
+                        return _pwgCategoriesService;
+                    }
+                }
+
+                private IPwgSessionService _pwgSessionService;
+                public IPwgSessionService PwgSessionService
+                {
+                    get
+                    {
+                        if (_pwgSessionService == null)
+                        {
+                            _pwgSessionService = new PwgSessionService();
+                        }
+                        return _pwgSessionService;
+                    }
+                }
+
+
+                private IPwgTagsService _pwgTagsService;
+                public IPwgTagsService PwgTagsService
+                {
+                    get
+                    {
+                        if (_pwgTagsService == null)
+                        {
+                            _pwgTagsService = new PwgTagsService();
+                        }
+                        return _pwgTagsService;
+                    }
+                }
+
+                private IPwgImagesService _pwgImagesService;
+                public IPwgImagesService PwgImagesService
+                {
+                    get
+                    {
+                        if (_pwgImagesService == null)
+                        {
+                            _pwgImagesService = new PwgImagesService();
+                        }
+                        return _pwgImagesService;
+                    }
+                }
+
+                private IPwgSetupService _pwgSetupService;
+                public IPwgSetupService PwgSetupService
+                {
+                    get
+                    {
+                        if (_pwgSetupService == null)
+                        {
+                            _pwgSetupService = new PwgSetupService();
+                        }
+                        return _pwgSetupService;
+                    }
+                }
+            }
+        
+        }
+}
Index: /extensions/PiwigoLib/PiwigoLib/Service/PwgSetupService.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoLib/Service/PwgSetupService.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoLib/Service/PwgSetupService.cs	(revision 7150)
@@ -0,0 +1,45 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+
+using Com.Piwigo.Lib.DTO;
+using Com.Piwigo.Lib.Proxy;
+using Com.Piwigo.Lib.Proxy.Response;
+using Com.Piwigo.Lib.DTO.Helper;
+using Com.Piwigo.Lib.IService;
+
+namespace Com.Piwigo.Lib.Service
+{
+
+    internal sealed class PwgSetupService : IPwgSetupService
+    {
+        /// <summary>
+        /// Setting up proxy parameters
+        /// </summary>
+        /// <param name="PwgUserAgent"></param>
+        /// <param name="PwgTimeOutInSecond"></param>
+        /// <param name="serverURI"></param>
+        /// <returns></returns>
+        public void Setup(String PwgUserAgent, Int16? PwgTimeOutInSecond, Uri serverURI)
+        {
+            try
+            {
+                if (PwgUserAgent != null)
+                {
+                    PwgConfigProxy.PwgUserAgent = PwgUserAgent;
+                }
+
+                if (PwgTimeOutInSecond.HasValue)
+                {
+                    PwgConfigProxy.PwgTimeOutInSecond = PwgTimeOutInSecond.Value;
+                }
+
+                PwgConfigProxy.PwgServeurUri = serverURI;
+            }
+            catch (PwgProxyException ex)
+            {
+                throw new PwgServiceException("Setup : a error is raised whn setting up PwgConfigProxy.", ex);
+            }
+        }
+    }
+}
Index: /extensions/PiwigoLib/PiwigoWpf/App.xaml
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/App.xaml	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/App.xaml	(revision 7150)
@@ -0,0 +1,12 @@
+﻿<Application x:Class="Com.Piwigo.Wpf.App"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:piwigo="clr-namespace:Com.Piwigo.Wpf.DTO"
+             Startup="onAppStartup"
+             Exit="onAppExit">
+    <Application.Resources>
+        <ObjectDataProvider x:Name="ImagesODP" x:Key="Images" ObjectType="{x:Type piwigo:PwgImageListWPF}" />
+        <ObjectDataProvider x:Name="SessionODP" x:Key="Session" ObjectType="{x:Type piwigo:PwgSessionWPF}" />
+        <ObjectDataProvider x:Name="CategoriesODP" x:Key="Categories" ObjectType="{x:Type piwigo:PwgCategoryListWPF}" />
+    </Application.Resources>
+</Application>
Index: /extensions/PiwigoLib/PiwigoWpf/App.xaml.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/App.xaml.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/App.xaml.cs	(revision 7150)
@@ -0,0 +1,60 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Linq;
+using System.Windows;
+using Com.Piwigo.Lib.Proxy;
+using Com.Piwigo.Wpf.DTO;
+using System.Windows.Data;
+
+namespace Com.Piwigo.Wpf
+{
+    /// <summary>
+    /// Interaction logic for App.xaml
+    /// </summary>
+    public partial class App : Application
+    {
+
+         void onAppStartup(object sender, StartupEventArgs args)
+        {
+
+            PwgConfigProxy.PwgUserAgent = "Com.Piwigo.Wpf.PiwigoWPF";
+            PwgConfigProxy.PwgServeurUriBuilder.Path = "phpwebgallery/ws.php";
+            PwgConfigProxy.PwgServeurUriBuilder.Scheme = "http://";
+
+            PwgSessionWPF sess = (PwgSessionWPF)(this.Resources["Session"] as ObjectDataProvider).Data;
+
+            sess.ServeurName = global::Com.Piwigo.Wpf.Properties.Settings.Default.ServerNameData;
+            sess.UserName = global::Com.Piwigo.Wpf.Properties.Settings.Default.UserNameData;
+            sess.Password = global::Com.Piwigo.Wpf.Properties.Settings.Default.PwdData;
+            sess.SaveSetting = global::Com.Piwigo.Wpf.Properties.Settings.Default.SaveSettingData;
+
+            MainWindow  mainWindow = new MainWindow();
+            mainWindow.Show();
+
+            //mainWindow.Photos = (PhotoList)(this.Resources["Photos"] as ObjectDataProvider).Data;
+            //mainWindow.Photos.Path = "..\\..\\Photos";
+
+            //mainWindow.ShoppingCart = (PrintList)(this.Resources["ShoppingCart"] as ObjectDataProvider).Data;
+            
+        }
+
+         private void onAppExit(object sender, ExitEventArgs e)
+         {
+             PwgSessionWPF sess = (PwgSessionWPF)(this.Resources["Session"] as ObjectDataProvider).Data;
+
+             if (sess.SaveSetting)
+             {
+                 global::Com.Piwigo.Wpf.Properties.Settings.Default.ServerNameData = sess.ServeurName;
+                 global::Com.Piwigo.Wpf.Properties.Settings.Default.UserNameData = sess.UserName;
+                 global::Com.Piwigo.Wpf.Properties.Settings.Default.PwdData = sess.Password;
+                 global::Com.Piwigo.Wpf.Properties.Settings.Default.SaveSettingData = sess.SaveSetting;
+
+
+                 global::Com.Piwigo.Wpf.Properties.Settings.Default.Save();
+             }
+         }
+
+    }
+}
Index: /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdBase.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdBase.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdBase.cs	(revision 7150)
@@ -0,0 +1,25 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Input;
+
+namespace Com.Piwigo.Wpf.Command
+{
+    public abstract class PwgCmdBase :  ICommand
+    {
+
+       #region ICommand Membres
+
+       public abstract  bool CanExecute(object parameter);
+
+       public abstract void Execute(object parameter);
+       
+        public event EventHandler CanExecuteChanged
+       {
+           add { CommandManager.RequerySuggested += value; }
+           remove { CommandManager.RequerySuggested -= value; }
+       }
+       #endregion
+    }
+}
Index: /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdConnect.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdConnect.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdConnect.cs	(revision 7150)
@@ -0,0 +1,21 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Input;
+
+namespace Com.Piwigo.Wpf.Command
+{
+    public sealed class PwgCmdConnect : PwgCmdBase
+    {
+        public override bool CanExecute(object parameter)
+        {
+            return true;
+        }
+
+        public override void Execute(object parameter)
+        {
+            throw new NotImplementedException();
+        }
+    }
+}
Index: /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdProvider.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdProvider.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdProvider.cs	(revision 7150)
@@ -0,0 +1,24 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Input;
+
+namespace Com.Piwigo.Wpf.Command
+{
+    public static sealed class PwgCmdProvider
+    {
+        public static ICommand _pwgCmdConnect;
+        public static ICommand PwgCmdConnect
+        {
+            get
+            {
+                if (_pwgCmdConnect == null)
+                {
+                    _pwgCmdConnect = new PwgCmdConnect();
+                }
+                return _pwgCmdConnect;
+            }
+        }
+    }
+}
Index: /extensions/PiwigoLib/PiwigoWpf/DTO/PwgCategoryListWPF.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/DTO/PwgCategoryListWPF.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/DTO/PwgCategoryListWPF.cs	(revision 7150)
@@ -0,0 +1,12 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Collections.ObjectModel;
+
+namespace Com.Piwigo.Wpf.DTO
+{
+    class PwgCategoryListWPF : ObservableCollection<PwgCategoryWPF> 
+    {
+    }
+}
Index: /extensions/PiwigoLib/PiwigoWpf/DTO/PwgCategoryWPF.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/DTO/PwgCategoryWPF.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/DTO/PwgCategoryWPF.cs	(revision 7150)
@@ -0,0 +1,78 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+
+using Com.Piwigo.Lib.DTO;
+using System.ComponentModel;
+using System.Collections.ObjectModel;
+
+namespace Com.Piwigo.Wpf.DTO
+{
+
+    public class PwgCategoryWPF : INotifyPropertyChanged
+    {
+        private Int32 _id;
+        public Int32 Id
+        {
+            set { _id = value; OnPropertyChanged("Id"); }
+            get { return _id; }
+        }
+
+        private ObservableCollection<Int32> _upperCategoriesId;
+        public  ObservableCollection<Int32> UpperCategoriesId
+        {
+            set { _upperCategoriesId = value; OnPropertyChanged("UpperCategoriesId"); }
+            get { return _upperCategoriesId; }
+        }
+
+        private String _name;
+        public String Name
+        {
+            set { _name = value; OnPropertyChanged("Name"); }
+            get { return _name; }
+        }
+
+        private Uri _url;
+        public Uri Url
+        {
+            set { _url = value; OnPropertyChanged("Url"); }
+            get { return _url; }
+        }
+
+        private Int64 _imagesCount;
+        public Int64 ImagesCount
+        {
+            set { _imagesCount = value; OnPropertyChanged("ImagesCount"); }
+            get { return _imagesCount; }
+        }
+
+        private Int64 _deepImagesCount;
+        public Int64 DeepImagesCount
+        {
+            set { _deepImagesCount = value; OnPropertyChanged("DeepImagesCount"); }
+            get { return _deepImagesCount; }
+        }
+
+        private Int64 _subCategoriesCount;
+        public Int64 SubCategoriesCount
+        {
+            set { _subCategoriesCount = value; OnPropertyChanged("SubCategoriesCount"); }
+            get { return _subCategoriesCount; }
+        }
+
+        private DateTime _lastDate;
+        public  DateTime LastDate
+        {
+            set { _lastDate = value; OnPropertyChanged("LastDate"); }
+            get { return _lastDate; }
+        }
+
+
+        public event PropertyChangedEventHandler PropertyChanged;
+        private void OnPropertyChanged(String info)
+        {
+            if (PropertyChanged != null)
+                PropertyChanged(this, new PropertyChangedEventArgs(info));
+        }
+    }
+}
Index: /extensions/PiwigoLib/PiwigoWpf/DTO/PwgImageListWPF.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/DTO/PwgImageListWPF.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/DTO/PwgImageListWPF.cs	(revision 7150)
@@ -0,0 +1,12 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Collections.ObjectModel;
+
+namespace Com.Piwigo.Wpf.DTO
+{
+    class PwgImageListWPF : ObservableCollection<PwgImageWPF> 
+    {
+    }
+}
Index: /extensions/PiwigoLib/PiwigoWpf/DTO/PwgImageWPF.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/DTO/PwgImageWPF.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/DTO/PwgImageWPF.cs	(revision 7150)
@@ -0,0 +1,123 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+
+using Com.Piwigo.Lib.DTO;
+using System.ComponentModel;
+using System.Collections.ObjectModel;
+
+namespace Com.Piwigo.Wpf.DTO
+{
+
+    public class PwgImageWPF : INotifyPropertyChanged
+    {
+        private Int32 _id;
+        public  Int32 Id
+        {
+            set { _id = value; OnPropertyChanged("Id"); }
+            get { return _id; }
+        }
+
+        private Int32 _width;
+        public Int32 Width
+        {
+            set { _width = value; OnPropertyChanged("Width"); }
+            get { return _width; }
+        }
+
+        private Int32 _height;
+        public Int32 Height
+        {
+            set { _height = value; OnPropertyChanged("Height"); }
+            get { return _height; }
+        }
+
+        private String _file;
+        public  String File
+        {
+            set { _file = value; OnPropertyChanged("File"); }
+            get { return _file; }
+        }
+
+        private Uri _urlThunb;
+        public  Uri UrlThunb
+        {
+            set { _urlThunb = value; OnPropertyChanged("UrlThunb"); }
+            get { return _urlThunb; }
+        }
+
+        private Uri _urlElement;
+        public  Uri UrlElement
+        {
+            set { _urlElement = value; OnPropertyChanged("UrlElement"); }
+            get { return _urlElement; }
+        }
+
+        private Uri _urlHighDef;
+        public  Uri UrlHighDef
+        {
+            set { _urlHighDef = value; OnPropertyChanged("UrlHighDef"); }
+            get { return _urlHighDef; }
+        }
+
+        private Int64 _counter;
+        public Int64 Counter
+        {
+            set { _counter = value; OnPropertyChanged("Counter"); }
+            get { return _counter; }
+        }
+
+        private ObservableCollection<PwgTag> _tags;
+        public ObservableCollection<PwgTag> Tags
+        {
+            set { _tags = value; OnPropertyChanged("Tags"); }
+            get { return _tags; }
+        }
+
+        //public List<PwgCategoryWPF> Categories { get; set; }
+        private ObservableCollection<PwgCategoryWPF> _categories;
+        public ObservableCollection<PwgCategoryWPF> Categories
+        {
+            set { _categories = value; OnPropertyChanged("Categories"); }
+            get { return _categories; }
+        }
+        public event PropertyChangedEventHandler PropertyChanged;
+        private void OnPropertyChanged(String info)
+        {
+            if (PropertyChanged != null)
+                PropertyChanged(this, new PropertyChangedEventArgs(info));
+        }
+    }
+
+    public class PwgImageRate : INotifyPropertyChanged
+    {
+        private Int32 _count;
+        public Int32 Count
+        {
+            set { _count = value; OnPropertyChanged("Count"); }
+            get { return _count; }
+        }
+
+        private Double _average;
+        public Double Average
+        {
+            set { _average = value; OnPropertyChanged("Average"); }
+            get { return _average; }
+        }
+
+        private Double _stdev;
+        public Double Stdev
+        {
+            set { _stdev = value; OnPropertyChanged("Stdev"); }
+            get { return _stdev; }
+        }
+
+
+        public event PropertyChangedEventHandler PropertyChanged;
+        private void OnPropertyChanged(String info)
+        {
+            if (PropertyChanged != null)
+                PropertyChanged(this, new PropertyChangedEventArgs(info));
+        }
+    }
+}
Index: /extensions/PiwigoLib/PiwigoWpf/DTO/PwgSessionWPF.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/DTO/PwgSessionWPF.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/DTO/PwgSessionWPF.cs	(revision 7150)
@@ -0,0 +1,88 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+
+using Com.Piwigo.Lib.DTO;
+using System.ComponentModel;
+
+namespace Com.Piwigo.Wpf.DTO
+{
+
+    public class PwgSessionWPF:  INotifyPropertyChanged
+    {
+        public Boolean IsConnected {
+            get { return this.Status != PwgSessionStatusEnum.Guest; }
+        }
+
+        private Boolean _saveSettings;
+        public Boolean SaveSetting
+        {
+            set { _saveSettings = value; OnPropertyChanged("SaveSetting"); }
+            get { return _saveSettings; }
+        }
+
+        private String _password;
+        public String Password
+        {
+            set { _password = value; OnPropertyChanged("Password"); }
+            get { return _password; }
+        }
+
+        private String _serverName;
+        public String ServeurName
+        {
+            set { _serverName = value; OnPropertyChanged("ServeurName"); }
+            get { return _serverName; }
+        }
+
+        private String _userName;
+        public String UserName             
+        {
+            set { _userName = value; OnPropertyChanged("UserName"); }
+            get { return _userName; }
+        }
+
+        private PwgSessionStatusEnum _status;
+        public PwgSessionStatusEnum Status
+        {
+            set { _status = value; OnPropertyChanged("Status"); OnPropertyChanged("IsConnected"); }
+            get { return _status; }
+        }
+
+        private String _template;
+        public String Template     
+        {
+            set { _template = value; OnPropertyChanged("Template"); }
+            get { return _template; }
+        }
+
+        private String _theme;
+        public String Theme
+        {
+            set { _theme = value; OnPropertyChanged("Theme"); }
+            get { return _theme; }
+        }
+
+        private String _language;
+        public String Language
+        {
+            set { _language = value; OnPropertyChanged("Language"); }
+            get { return _language; }
+        }
+
+        private String _charSet;
+        public String CharSet
+        {
+            set { _charSet = value; OnPropertyChanged("CharSet"); }
+            get { return _charSet; }
+        }
+
+        public event PropertyChangedEventHandler PropertyChanged;
+        private void OnPropertyChanged(String info)
+        {
+            if (PropertyChanged != null)
+                PropertyChanged(this, new PropertyChangedEventArgs(info));
+        }
+    
+    }
+}
Index: /extensions/PiwigoLib/PiwigoWpf/DTO/PwgTagListWPF.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/DTO/PwgTagListWPF.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/DTO/PwgTagListWPF.cs	(revision 7150)
@@ -0,0 +1,12 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Collections.ObjectModel;
+
+namespace Com.Piwigo.Wpf.DTO
+{
+    class PwgTagListWPF : ObservableCollection<PwgTagWPF> 
+    {
+    }
+}
Index: /extensions/PiwigoLib/PiwigoWpf/DTO/PwgTagWPF.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/DTO/PwgTagWPF.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/DTO/PwgTagWPF.cs	(revision 7150)
@@ -0,0 +1,54 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using System.ComponentModel;
+
+
+namespace Com.Piwigo.Wpf.DTO
+{
+
+    public class PwgTagWPF : INotifyPropertyChanged
+    {
+        private Int32 _id;
+        public Int32 Id
+        {
+            set { _id = value; OnPropertyChanged("Id"); }
+            get { return _id; }
+        }
+
+        private String _name;
+        public String Name
+        {
+            set { _name = value; OnPropertyChanged("Name"); }
+            get { return _name; }
+        }
+
+        private String _urlName;
+        public String UrlName
+        {
+            set { _urlName = value; OnPropertyChanged("UrlName"); }
+            get { return _urlName; }
+        }
+
+        private Int64 _counter;
+        public Int64 Counter
+        {
+            set { _counter = value; OnPropertyChanged("Counter"); }
+            get { return _counter; }
+        }
+
+        private Uri _urlTag;
+        public Uri UrlTag
+        {
+            set { _urlTag = value; OnPropertyChanged("UrlTag"); }
+            get { return _urlTag; }
+        }
+
+        public event PropertyChangedEventHandler PropertyChanged;
+        private void OnPropertyChanged(String info)
+        {
+            if (PropertyChanged != null)
+                PropertyChanged(this, new PropertyChangedEventArgs(info));
+        }
+    }
+}
Index: /extensions/PiwigoLib/PiwigoWpf/MainWindow.xaml
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/MainWindow.xaml	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/MainWindow.xaml	(revision 7150)
@@ -0,0 +1,507 @@
+﻿<Window x:Class="Com.Piwigo.Wpf.MainWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:pwg="clr-namespace:Com.Piwigo.Wpf"
+        xmlns:pwgcmd="clr-namespace:Com.Piwigo.Wpf.Command"
+        Title="PiwigoWpf"
+        WindowState="Maximized"
+        MinHeight="600" MinWidth="800">
+    <Window.Resources>
+        <LinearGradientBrush x:Key="WindowGradient" StartPoint="0,0.3" EndPoint="1,0">
+            <LinearGradientBrush.GradientStops>
+                <GradientStop Color="#B2B6CAFF" Offset="0" />
+                <GradientStop Color="#BFC3D5FF" Offset="0.1" />
+                <GradientStop Color="#E0E4F0FF" Offset="0.3" />
+                <GradientStop Color="#E6EAF5FF" Offset="0.5" />
+                <GradientStop Color="#CFD7E2FF" Offset="0.6" />
+                <GradientStop Color="#BFC5D3FF" Offset="0.8" />
+                <GradientStop Color="#C4CBD8FF" Offset="1" />
+            </LinearGradientBrush.GradientStops>
+        </LinearGradientBrush>
+
+        <LinearGradientBrush x:Key="ListBoxGradient" StartPoint="0,0" EndPoint="0,1">
+            <LinearGradientBrush.GradientStops>
+                <GradientStop Color="#90000000" Offset="0" />
+                <GradientStop Color="#40000000" Offset="0.005" />
+                <GradientStop Color="#10000000" Offset="0.04" />
+                <GradientStop Color="#20000000" Offset="0.945" />
+                <GradientStop Color="#60FFFFFF" Offset="1" />
+            </LinearGradientBrush.GradientStops>
+        </LinearGradientBrush>
+
+        <LinearGradientBrush x:Key="ShoppingCartGradient" StartPoint="0,0" EndPoint="0,1">
+            <LinearGradientBrush.GradientStops>
+                <GradientStop Color="#90000000" Offset="0" />
+                <GradientStop Color="#40000000" Offset="0.002" />
+                <GradientStop Color="#10000000" Offset="0.02" />
+                <GradientStop Color="#20000000" Offset="0.98" />
+                <GradientStop Color="#60FFFFFF" Offset="1" />
+            </LinearGradientBrush.GradientStops>
+        </LinearGradientBrush>
+
+        <LinearGradientBrush x:Key="ReflectionGradient" StartPoint="0,1" EndPoint="0,0">
+            <LinearGradientBrush.GradientStops>
+                <GradientStop Color="#50000000" Offset="0" />
+                <GradientStop Color="Transparent" Offset=".5" />
+            </LinearGradientBrush.GradientStops>
+        </LinearGradientBrush>
+
+        <LinearGradientBrush x:Key="ButtonGradient" StartPoint="0,0" EndPoint="0,1">
+            <LinearGradientBrush.GradientStops>
+                <GradientStop Color="#FDB6CADF" Offset="0" />
+                <GradientStop Color="#FCC3C5FF" Offset="0.1" />
+                <GradientStop Color="#FCC4D0EF" Offset="0.3" />
+                <GradientStop Color="#FDB7C2DF" Offset="0.6" />
+                <GradientStop Color="#FE95B3CF" Offset="0.8" />
+                <GradientStop Color="#FE96AACF" Offset="1" />
+            </LinearGradientBrush.GradientStops>
+        </LinearGradientBrush>
+
+        <LinearGradientBrush x:Key="VerticalScrollGradient" StartPoint="0,0" EndPoint="1,0">
+            <LinearGradientBrush.GradientStops>
+                <GradientStop Color="#FDB6CADF" Offset="0" />
+                <GradientStop Color="#FCC3C5FF" Offset="0.1" />
+                <GradientStop Color="#FCC4D0EF" Offset="0.3" />
+                <GradientStop Color="#FDB7C2DF" Offset="0.6" />
+                <GradientStop Color="#FE95B3CF" Offset="0.8" />
+                <GradientStop Color="#FE96AACF" Offset="1" />
+            </LinearGradientBrush.GradientStops>
+        </LinearGradientBrush>
+
+        <LinearGradientBrush x:Key="ComboBoxGradient" StartPoint="0,0" EndPoint="0,1">
+            <LinearGradientBrush.GradientStops>
+                <GradientStop Color="#B2B6CAFF" Offset="0" />
+                <GradientStop Color="#B0B3C5FF" Offset="0.1" />
+                <GradientStop Color="#BEE4E0FF" Offset="0.3" />
+                <GradientStop Color="#B0D7E2FF" Offset="0.6" />
+                <GradientStop Color="#B0C5D3FF" Offset="0.8" />
+                <GradientStop Color="#C4CBD8FF" Offset="1" />
+            </LinearGradientBrush.GradientStops>
+        </LinearGradientBrush>
+
+        <LinearGradientBrush x:Key="GreetingCardGradient" StartPoint="0,0" EndPoint="0,1">
+            <LinearGradientBrush.GradientStops>
+                <GradientStop Color="#EEEEEE" Offset="0" />
+                <GradientStop Color="#FFFFFF" Offset="1" />
+            </LinearGradientBrush.GradientStops>
+        </LinearGradientBrush>
+
+        <LinearGradientBrush x:Key="ButtonUpGradient" StartPoint="0,0" EndPoint="0,1">
+            <LinearGradientBrush.GradientStops>
+                <GradientStop Color="Transparent" Offset="0" />
+                <GradientStop Color="#33000000" Offset="1" />
+            </LinearGradientBrush.GradientStops>
+        </LinearGradientBrush>
+
+        <LinearGradientBrush x:Key="ButtonDownGradient" StartPoint="0,0" EndPoint="0,1">
+            <LinearGradientBrush.GradientStops>
+                <GradientStop Color="#10000000" Offset="0" />
+                <GradientStop Color="#20000000" Offset="1" />
+            </LinearGradientBrush.GradientStops>
+        </LinearGradientBrush>
+
+        <LinearGradientBrush x:Key="ButtonDisabledGradient" StartPoint="0,0" EndPoint="0,1">
+            <LinearGradientBrush.GradientStops>
+                <GradientStop Color="#10302A90" Offset="0" />
+                <GradientStop Color="#10201040" Offset="1" />
+            </LinearGradientBrush.GradientStops>
+        </LinearGradientBrush>
+
+        <!-- STYLES -->
+
+        <Style TargetType="{x:Type pwg:MainWindow}">
+            <Setter Property="Background" Value="{DynamicResource WindowGradient}" />
+        </Style>
+
+        <Style x:Key="TitleText" TargetType="{x:Type TextBlock}" >
+            <Setter Property="FontFamily" Value="Segoe Black" />
+            <Setter Property="FontSize" Value="20px" />
+            <Setter Property="Foreground" Value="MidnightBlue" />
+        </Style>
+
+        <!-- DATA TEMPLATES -->
+
+        <!--<DataTemplate DataType="{x:Type pd:ImageFile}">
+            <Border VerticalAlignment="Center" HorizontalAlignment="Center" Padding="4" Margin="2" Background="White">
+                <Image Source="{Binding Image}" />
+            </Border>
+        </DataTemplate>
+
+        <DataTemplate DataType="{x:Type pd:Print}">
+            <Border Margin="3" VerticalAlignment="Center" HorizontalAlignment="Center" Background="White" Padding="3"  BorderBrush="#66000000" BorderThickness="1" MaxWidth="60" MaxHeight="60" >
+                <Image Source="{Binding Photo}" />
+            </Border>
+        </DataTemplate>
+
+        <DataTemplate DataType="{x:Type pd:GreetingCard}">
+            <Grid Margin="3" >
+                <Border VerticalAlignment="Center" HorizontalAlignment="Center" Background="{DynamicResource GreetingCardGradient}" Width="40" Height="50" BorderBrush="#44000000" BorderThickness="1" >
+                    <Border.RenderTransform>
+                        <SkewTransform AngleY="-10" />
+                    </Border.RenderTransform>
+                </Border>
+                <Border VerticalAlignment="Center" HorizontalAlignment="Center" Background="White" Width="50" Height="50" BorderBrush="#66000000" BorderThickness="1" >
+                    <Image Margin="3" Source="{Binding Photo}" />
+                </Border>
+            </Grid>
+        </DataTemplate>
+
+        <DataTemplate DataType="{x:Type pd:TShirt}">
+            <Grid Margin="3">
+                <Path VerticalAlignment="Center" HorizontalAlignment="Center" Fill="White" Stroke="#66000000"  Data="M 0 9.6 L 24 0 L 40 0 L 64 9.6 L 62.4 24 L 51.2 24 L 51.2 56 L 12.8 56 L 12.8 24 L 1.6 24 Z "/>
+                <Image Source="{Binding Photo}"  MaxWidth="32" MaxHeight="36"  VerticalAlignment="Center" HorizontalAlignment="Center"/>
+            </Grid>
+        </DataTemplate>-->
+
+        <!-- PHOTOLIST TEMPLATE -->
+
+        <Style x:Key="PhotoListStyle" TargetType="{x:Type ListBox}">
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="{x:Type ListBox}" >
+                        <Border 
+							BorderBrush="Gray" 
+							BorderThickness="1" 
+							CornerRadius="6" 
+							Background="{DynamicResource ListBoxGradient}" >
+                            <ScrollViewer 
+								VerticalScrollBarVisibility="Disabled" 
+								HorizontalScrollBarVisibility="Auto">
+                                <StackPanel  
+									IsItemsHost="True" 
+									Orientation="Horizontal" 
+									HorizontalAlignment="Left" />
+                            </ScrollViewer>
+                        </Border>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+
+        <!-- PHOTOLIST STORYBOARDS -->
+
+        <Style x:Key="PhotoListItem" TargetType="{x:Type ListBoxItem}">
+            <Setter Property="MaxHeight" Value="75" />
+            <Setter Property="MinHeight" Value="75" />
+            <Setter Property="Opacity" Value=".75" />
+            <Style.Triggers>
+                <EventTrigger RoutedEvent="Mouse.MouseEnter">
+                    <EventTrigger.Actions>
+                        <BeginStoryboard>
+                            <Storyboard>
+                                <DoubleAnimation 
+									Duration="0:0:0.2" 
+									Storyboard.TargetProperty="MaxHeight" 
+									To="85" />
+                                <DoubleAnimation 
+									Duration="0:0:0.2" 
+									Storyboard.TargetProperty="Opacity"
+									To="1.0" />
+                            </Storyboard>
+                        </BeginStoryboard>
+                    </EventTrigger.Actions>
+                </EventTrigger>
+
+                <EventTrigger RoutedEvent="Mouse.MouseLeave">
+                    <EventTrigger.Actions>
+                        <BeginStoryboard>
+                            <Storyboard>
+                                <DoubleAnimation 
+									Duration="0:0:1" 
+									Storyboard.TargetProperty="MaxHeight" />
+                                <DoubleAnimation 
+									Duration="0:0:0.2" 
+									Storyboard.TargetProperty="Opacity" />
+                            </Storyboard>
+                        </BeginStoryboard>
+                    </EventTrigger.Actions>
+                </EventTrigger>
+            </Style.Triggers>
+        </Style>
+
+        <!-- SHOPPING CART TEMPLATE -->
+
+        <Style x:Key="ShoppingCartStyle" TargetType="{x:Type ListBox}">
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="{x:Type ListBox}" >
+                        <Border 
+							BorderBrush="Gray" 
+							BorderThickness="1" 
+							CornerRadius="6" 
+							Background="{DynamicResource ShoppingCartGradient}" >
+                            <ScrollViewer>
+                                <WrapPanel
+									ItemHeight="70" 
+									ItemWidth="70" 
+									Margin="0,25,0,0"
+									IsItemsHost="True" 
+									Orientation="Horizontal" 
+									HorizontalAlignment="Center"  />
+                            </ScrollViewer>
+                        </Border>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+
+        <!-- SHOPPING CART TRIGGERS -->
+
+        <Style x:Key="ShoppingCartItem" TargetType="{x:Type ListBoxItem}">
+            <Setter Property="BorderBrush" Value="Transparent" />
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="{x:Type ListBoxItem}">
+                        <Border 
+							x:Name="ContentBorder" 
+							Opacity="0.85">
+                            <ContentPresenter />
+                        </Border>
+                        <ControlTemplate.Triggers>
+                            <Trigger Property="IsSelected" Value="True">
+                                <Setter 
+									TargetName="ContentBorder" 
+									Property="Opacity" 
+									Value="1.0" />
+                            </Trigger>
+                        </ControlTemplate.Triggers>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+
+        <!-- BUTTON TEMPLATE -->
+
+        <Style TargetType="{x:Type Button}">
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="{x:Type Button}">
+                        <Border x:Name="OuterBorder"
+							CornerRadius="3" 
+							Background="{DynamicResource ButtonGradient}">
+                            <Border
+								x:Name="InnerBorder"
+								CornerRadius="3"
+								Background="{DynamicResource ButtonUpGradient}"
+								Padding="{TemplateBinding Padding}">
+                                <ContentPresenter x:Name="ContentSite" 
+								HorizontalAlignment="Center" 
+								VerticalAlignment="Center" />
+                            </Border>
+                        </Border>
+                        <ControlTemplate.Triggers>
+                            <Trigger Property="IsPressed" Value="true">
+                                <Setter TargetName="InnerBorder" Property="Background" Value="{DynamicResource ButtonDownGradient}" />
+                            </Trigger>
+                            <Trigger Property="IsEnabled" Value="false">
+                                <Setter TargetName="InnerBorder" Property="Background" Value="{DynamicResource ButtonDisabledGradient}"  />
+                                <Setter Property="BorderBrush" Value="Silver"  />
+                                <Setter Property="Foreground" Value="SlateGray"  />
+                            </Trigger>
+                        </ControlTemplate.Triggers>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+            <Setter Property="Height" Value="18" />
+            <Setter Property="Foreground" Value="MidnightBlue" />
+        </Style>
+
+        <!-- COMBOBOX STYLE -->
+
+        <Style TargetType="{x:Type ComboBox}" >
+            <Setter Property="Background" Value="{DynamicResource ComboBoxGradient}" />
+            <Setter Property="BorderThickness" Value="0" />
+            <Setter Property="Height" Value="18px" />
+            <Setter Property="Foreground" Value="MidnightBlue" />
+        </Style>
+
+        <!-- PROGRESS BAR STYLE -->
+
+        <Style TargetType="{x:Type ProgressBar}" >
+            <Setter Property="Background" Value="{DynamicResource ComboBoxGradient}" />
+            <Setter Property="BorderThickness" Value="1" />
+            <Setter Property="BorderBrush" Value="Gray" />
+            <Setter Property="Foreground" Value="MidnightBlue" />
+        </Style>
+
+        <!-- SCROLLBAR TEMPLATES -->
+
+        <Style x:Key="Scrollbar_LineButton" TargetType="{x:Type RepeatButton}">
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="{x:Type RepeatButton}">
+                        <Border 
+							BorderBrush="Transparent" 
+							BorderThickness="1" 
+							CornerRadius="6" 
+							Background="{DynamicResource ButtonGradient}">
+                            <ContentPresenter x:Name="ContentSite" />
+                        </Border>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+            <Setter Property="MinHeight" Value="12" />
+            <Setter Property="MinWidth" Value="12" />
+            <Setter Property="Foreground" Value="Gray" />
+            <Setter Property="FontSize" Value="6pt" />
+            <Setter Property="FontWeight" Value="Bold" />
+            <Setter Property="FontFamily" Value="Lucida Sans" />
+            <Setter Property="VerticalAlignment" Value="Center" />
+            <Setter Property="HorizontalAlignment" Value="Center" />
+        </Style>
+
+        <Style x:Key="ScrollBar_TrackRepeater"  TargetType="{x:Type RepeatButton}">
+            <Setter Property="IsTabStop" Value="false" />
+            <Setter Property="Focusable" Value="false" />
+            <Setter Property="Command" Value="ScrollBar.PageUpCommand" />
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="{x:Type RepeatButton}">
+                        <Rectangle Fill="Transparent" />
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+
+        <Style x:Key="ScrollBar_UpTrack" BasedOn="{StaticResource ScrollBar_TrackRepeater}" TargetType="{x:Type RepeatButton}">
+            <Setter Property="Command" Value="ScrollBar.PageUpCommand" />
+        </Style>
+
+        <Style x:Key="ScrollBar_DownTrack" BasedOn="{StaticResource ScrollBar_TrackRepeater}" TargetType="{x:Type RepeatButton}">
+            <Setter Property="Command" Value="ScrollBar.PageDownCommand" />
+        </Style>
+
+        <Style x:Key="ScrollBar_LeftTrack" BasedOn="{StaticResource ScrollBar_TrackRepeater}" TargetType="{x:Type RepeatButton}">
+            <Setter Property="Command" Value="ScrollBar.PageLeftCommand" />
+        </Style>
+
+        <Style x:Key="ScrollBar_RightTrack" BasedOn="{StaticResource ScrollBar_TrackRepeater}" TargetType="{x:Type RepeatButton}">
+            <Setter Property="Command" Value="ScrollBar.PageRightCommand" />
+        </Style>
+
+        <Style x:Key="ScrollBar_VerticalThumb" TargetType="{x:Type Thumb}">
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="{x:Type Thumb}">
+                        <Border CornerRadius="6" 
+							BorderBrush="Transparent"     
+							BorderThickness="1" 
+							Background="{DynamicResource VerticalScrollGradient}" />
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+            <Setter Property="MinHeight" Value="10" />
+            <Setter Property="MinWidth" Value="10" />
+        </Style>
+
+        <Style x:Key="ScrollBar_HorizontalThumb" TargetType="{x:Type Thumb}">
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="{x:Type Thumb}">
+                        <Border CornerRadius="6" 
+							BorderBrush="Transparent"     
+							BorderThickness="1" 
+							Background="{DynamicResource ButtonGradient}" />
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+            <Setter Property="MinHeight" Value="10" />
+            <Setter Property="MinWidth" Value="10" />
+        </Style>
+
+        <Style TargetType="{x:Type ScrollBar}">
+            <Setter Property="Background" Value="Transparent" />
+            <Setter Property="MinWidth" Value="10" />
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="{x:Type ScrollBar}">
+                        <Grid>
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition Width="10"/>
+                            </Grid.ColumnDefinitions>
+                            <Grid.RowDefinitions>
+                                <RowDefinition Height="10" />
+                                <RowDefinition Height="*"/>
+                                <RowDefinition Height="10" />
+                            </Grid.RowDefinitions>
+                            <Border Grid.Row="1" BorderThickness="0" Background="Transparent" CornerRadius="4"/>
+                            <RepeatButton Grid.Row="0" Style="{DynamicResource Scrollbar_LineButton}" Command="ScrollBar.LineUpCommand" Content=" ^" />
+                            <Track Grid.Row="1" Name="PART_Track"  IsDirectionReversed="True">
+                                <Track.IncreaseRepeatButton>
+                                    <RepeatButton Style="{DynamicResource ScrollBar_DownTrack}"/>
+                                </Track.IncreaseRepeatButton>
+                                <Track.DecreaseRepeatButton>
+                                    <RepeatButton Style="{DynamicResource ScrollBar_UpTrack}"/>
+                                </Track.DecreaseRepeatButton>
+                                <Track.Thumb>
+                                    <Thumb Style="{DynamicResource ScrollBar_VerticalThumb}"/>
+                                </Track.Thumb>
+                            </Track>
+                            <RepeatButton Grid.Row="2" Style="{DynamicResource Scrollbar_LineButton}" Command="ScrollBar.LineDownCommand" Content=" v" />
+                        </Grid>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+            <Style.Triggers>
+                <Trigger Property="Orientation" Value="Horizontal" >
+                    <Setter Property="Background" Value="Transparent" />
+                    <Setter Property="MinHeight" Value="10" />
+                    <Setter Property="Template">
+                        <Setter.Value>
+                            <ControlTemplate TargetType="{x:Type ScrollBar}">
+                                <Grid>
+                                    <Grid.RowDefinitions>
+                                        <RowDefinition Height="12"/>
+                                    </Grid.RowDefinitions>
+                                    <Grid.ColumnDefinitions>
+                                        <ColumnDefinition Width="12" />
+                                        <ColumnDefinition Width="*"/>
+                                        <ColumnDefinition Width="12" />
+                                    </Grid.ColumnDefinitions>
+                                    <Border Grid.Column="1" BorderThickness="0" Background="Transparent" CornerRadius="4"/>
+                                    <RepeatButton Grid.Column="0" Style="{DynamicResource Scrollbar_LineButton}" Command="ScrollBar.LineLeftCommand" Content=" &lt;" />
+                                    <Track Grid.Column="1" Name="PART_Track">
+                                        <Track.IncreaseRepeatButton>
+                                            <RepeatButton Style="{DynamicResource ScrollBar_RightTrack}"/>
+                                        </Track.IncreaseRepeatButton>
+                                        <Track.DecreaseRepeatButton>
+                                            <RepeatButton Style="{DynamicResource ScrollBar_LeftTrack}"/>
+                                        </Track.DecreaseRepeatButton>
+                                        <Track.Thumb>
+                                            <Thumb Style="{DynamicResource ScrollBar_HorizontalThumb}"/>
+                                        </Track.Thumb>
+                                    </Track>
+                                    <RepeatButton Grid.Column="2" Style="{DynamicResource Scrollbar_LineButton}" Command="ScrollBar.LineRightCommand" Content=" &gt;" />
+
+                                </Grid>
+                            </ControlTemplate>
+                        </Setter.Value>
+                    </Setter>
+                </Trigger>
+            </Style.Triggers>
+        </Style>
+    </Window.Resources>
+    <DockPanel Name="mainDockPanel"  Margin="5">
+        <StackPanel Name="headerStackPanel" DockPanel.Dock="Top" Orientation="Vertical">
+            <Image Name="ImgPiwigoLogo" MinHeight="50" MinWidth="50"
+                   Source="pack://application:,,,/Pictures/PiwigoLogo.png" 
+                   ToolTip="www.piwigo.org" Stretch="None" />
+            <StackPanel Name="connectStackPanel" Orientation="Horizontal" VerticalAlignment="Center"  Margin="5"
+                        DataContext="{Binding Source={StaticResource Session}}">
+                <Label Content="User" Name="LblUsr" />
+                <TextBox Height="23" Name="BbUsr" Width="120" Text="{Binding Path=UserName, Mode=TwoWay}" />
+                <Label Content="Password" Name="LblPwd" />
+                <TextBox Height="23" Name="TbPwd" Width="120" Text="{Binding Path=Password, Mode=TwoWay}"/>
+                <Label Content="Url" Name="LblUrl" />
+                <TextBox Height="23" Name="TbUrl" Width="300" Text="{Binding Path=ServeurName, Mode=TwoWay}"/>
+                <CheckBox  VerticalAlignment="Center" IsChecked="{Binding Path=SaveSetting, Mode=TwoWay}">Save settings</CheckBox>
+                <Button Margin="2" Command="{x:Static pwgcmd:PwgCmdProvider.PwgCmdConnect}">Go</Button>
+            </StackPanel>
+           <ProgressBar IsIndeterminate="True" />          
+        </StackPanel>
+        
+        <ListView Name="listViewCategory" DockPanel.Dock="Left" MinWidth="100" />
+        <ListView Name="listViewImage" DockPanel.Dock="Right"  MinWidth="500"/>
+    </DockPanel>
+    
+</Window>
Index: /extensions/PiwigoLib/PiwigoWpf/MainWindow.xaml.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/MainWindow.xaml.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/MainWindow.xaml.cs	(revision 7150)
@@ -0,0 +1,27 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Com.Piwigo.Wpf
+{
+    /// <summary>
+    /// Interaction logic for MainWindow.xaml
+    /// </summary>
+    public partial class MainWindow : Window
+    {
+        public MainWindow()
+        {
+            InitializeComponent();
+        }
+    }
+}
Index: /extensions/PiwigoLib/PiwigoWpf/PiwigoWpf.csproj
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/PiwigoWpf.csproj	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/PiwigoWpf.csproj	(revision 7150)
@@ -0,0 +1,169 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{59F7FCF2-858A-406D-92A6-50514BD89B43}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Com.Piwigo.Wpf</RootNamespace>
+    <AssemblyName>PiwigoWpf</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <WarningLevel>4</WarningLevel>
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <StartupObject>Com.Piwigo.Wpf.App</StartupObject>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Xaml">
+      <RequiredTargetFramework>4.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="WindowsBase" />
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+  </ItemGroup>
+  <ItemGroup>
+    <ApplicationDefinition Include="App.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </ApplicationDefinition>
+    <Compile Include="Command\PwgCmdProvider.cs" />
+    <Compile Include="Command\PwgCmdConnect.cs" />
+    <Compile Include="Command\PwgCmdBase.cs" />
+    <Compile Include="Settings.cs" />
+    <Page Include="MainWindow.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Compile Include="App.xaml.cs">
+      <DependentUpon>App.xaml</DependentUpon>
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="DTO\PwgTagListWPF.cs" />
+    <Compile Include="DTO\PwgImageListWPF.cs" />
+    <Compile Include="DTO\PwgCategoryListWPF.cs" />
+    <Compile Include="DTO\PwgCategoryWPF.cs" />
+    <Compile Include="DTO\PwgImageWPF.cs" />
+    <Compile Include="DTO\PwgSessionWPF.cs" />
+    <Compile Include="DTO\PwgTagWPF.cs" />
+    <Compile Include="MainWindow.xaml.cs">
+      <DependentUpon>MainWindow.xaml</DependentUpon>
+      <SubType>Code</SubType>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <None Include="app.config" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <AppDesigner Include="Properties\" />
+  </ItemGroup>
+  <ItemGroup>
+    <Resource Include="Pictures\PiwigoLogo.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\PiwigoLib\PiwigoLib.csproj">
+      <Project>{64C068C5-DBFE-4712-9081-B9100698F35C}</Project>
+      <Name>PiwigoLib</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Folder Include="Resources\" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include=".NETFramework,Version=v4.0">
+      <Visible>False</Visible>
+      <ProductName>Microsoft .NET Framework 4 %28x86 et x64%29</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /extensions/PiwigoLib/PiwigoWpf/Properties/AssemblyInfo.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/Properties/AssemblyInfo.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/Properties/AssemblyInfo.cs	(revision 7150)
@@ -0,0 +1,55 @@
+﻿using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("PiwigoWpf")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("PiwigoWpf")]
+[assembly: AssemblyCopyright("Copyright ©  2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+//In order to begin building localizable applications, set 
+//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
+//inside a <PropertyGroup>.  For example, if you are using US english
+//in your source files, set the <UICulture> to en-US.  Then uncomment
+//the NeutralResourceLanguage attribute below.  Update the "en-US" in
+//the line below to match the UICulture setting in the project file.
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+    //(used if a resource is not found in the page, 
+    // or application resource dictionaries)
+    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+    //(used if a resource is not found in the page, 
+    // app, or any theme specific resource dictionaries)
+)]
+
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
Index: /extensions/PiwigoLib/PiwigoWpf/Properties/Resources.Designer.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/Properties/Resources.Designer.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/Properties/Resources.Designer.cs	(revision 7150)
@@ -0,0 +1,63 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     Ce code a été généré par un outil.
+//     Version du runtime :4.0.30319.1
+//
+//     Les modifications apportées à ce fichier peuvent provoquer un comportement incorrect et seront perdues si
+//     le code est régénéré.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Com.Piwigo.Wpf.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   Une classe de ressource fortement typée destinée, entre autres, à la consultation des chaînes localisées.
+    /// </summary>
+    // Cette classe a été générée automatiquement par la classe StronglyTypedResourceBuilder
+    // à l'aide d'un outil, tel que ResGen ou Visual Studio.
+    // Pour ajouter ou supprimer un membre, modifiez votre fichier .ResX, puis réexécutez ResGen
+    // avec l'option /str ou régénérez votre projet VS.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Retourne l'instance ResourceManager mise en cache utilisée par cette classe.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Com.Piwigo.Wpf.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Remplace la propriété CurrentUICulture du thread actuel pour toutes
+        ///   les recherches de ressources à l'aide de cette classe de ressource fortement typée.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}
Index: /extensions/PiwigoLib/PiwigoWpf/Properties/Resources.resx
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/Properties/Resources.resx	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/Properties/Resources.resx	(revision 7150)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /extensions/PiwigoLib/PiwigoWpf/Properties/Settings.Designer.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/Properties/Settings.Designer.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/Properties/Settings.Designer.cs	(revision 7150)
@@ -0,0 +1,74 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     Ce code a été généré par un outil.
+//     Version du runtime :4.0.30319.1
+//
+//     Les modifications apportées à ce fichier peuvent provoquer un comportement incorrect et seront perdues si
+//     le code est régénéré.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Com.Piwigo.Wpf.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("")]
+        public string ServerNameData {
+            get {
+                return ((string)(this["ServerNameData"]));
+            }
+            set {
+                this["ServerNameData"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("")]
+        public string UserNameData {
+            get {
+                return ((string)(this["UserNameData"]));
+            }
+            set {
+                this["UserNameData"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("")]
+        public string PwdData {
+            get {
+                return ((string)(this["PwdData"]));
+            }
+            set {
+                this["PwdData"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("False")]
+        public bool SaveSettingData {
+            get {
+                return ((bool)(this["SaveSettingData"]));
+            }
+            set {
+                this["SaveSettingData"] = value;
+            }
+        }
+    }
+}
Index: /extensions/PiwigoLib/PiwigoWpf/Properties/Settings.settings
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/Properties/Settings.settings	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/Properties/Settings.settings	(revision 7150)
@@ -0,0 +1,18 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="Com.Piwigo.Wpf.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="ServerNameData" Type="System.String" Scope="User">
+      <Value Profile="(Default)" />
+    </Setting>
+    <Setting Name="UserNameData" Type="System.String" Scope="User">
+      <Value Profile="(Default)" />
+    </Setting>
+    <Setting Name="PwdData" Type="System.String" Scope="User">
+      <Value Profile="(Default)" />
+    </Setting>
+    <Setting Name="SaveSettingData" Type="System.Boolean" Scope="User">
+      <Value Profile="(Default)">False</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: /extensions/PiwigoLib/PiwigoWpf/Settings.cs
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/Settings.cs	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/Settings.cs	(revision 7150)
@@ -0,0 +1,28 @@
+﻿namespace Com.Piwigo.Wpf.Properties {
+    
+    
+    // Cette classe vous permet de gérer des événements spécifiques dans la classe de paramètres :
+    //  L'événement SettingChanging est déclenché avant la modification d'une valeur de paramètre.
+    //  L'événement PropertyChanged est déclenché après la modification d'une valeur de paramètre.
+    //  L'événement SettingsLoaded est déclenché après le chargement des valeurs de paramètre.
+    //  L'événement SettingsSaving est déclenché avant l'enregistrement des valeurs de paramètre.
+    internal sealed partial class Settings {
+        
+        public Settings() {
+            // // Pour ajouter des gestionnaires d'événements afin d'enregistrer et de modifier les paramètres, supprimez les marques de commentaire des lignes ci-dessous :
+            //
+            // this.SettingChanging += this.SettingChangingEventHandler;
+            //
+            // this.SettingsSaving += this.SettingsSavingEventHandler;
+            //
+        }
+        
+        private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) {
+            // Ajouter du code pour gérer l'événement SettingChangingEvent ici.
+        }
+        
+        private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) {
+            // Ajouter du code pour gérer l'événement SettingsSaving ici.
+        }
+    }
+}
Index: /extensions/PiwigoLib/PiwigoWpf/app.config
===================================================================
--- /extensions/PiwigoLib/PiwigoWpf/app.config	(revision 7150)
+++ /extensions/PiwigoLib/PiwigoWpf/app.config	(revision 7150)
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<configuration>
+<configSections>
+    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+        <section name="Com.Piwigo.Wpf.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+    </sectionGroup>
+</configSections>
+<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup><userSettings>
+        <Com.Piwigo.Wpf.Properties.Settings>
+            <setting name="ServerNameData" serializeAs="String">
+                <value />
+            </setting>
+            <setting name="UserNameData" serializeAs="String">
+                <value />
+            </setting>
+            <setting name="PwdData" serializeAs="String">
+                <value />
+            </setting>
+            <setting name="SaveSettingData" serializeAs="String">
+                <value>False</value>
+            </setting>
+        </Com.Piwigo.Wpf.Properties.Settings>
+    </userSettings>
+</configuration>
