Index: /extensions/pLoader/trunk/locale/fr_FR/pLoader.po
===================================================================
--- /extensions/pLoader/trunk/locale/fr_FR/pLoader.po	(revision 4503)
+++ /extensions/pLoader/trunk/locale/fr_FR/pLoader.po	(revision 4504)
@@ -578,6 +578,6 @@
 msgstr "Gestion de la mise à jour des photos"
 
-msgid "Who can see the photo? :"
-msgstr "Qui peut voir la photo ? :"
+msgid "Who can see the photo?"
+msgstr "Qui peut voir la photo ?"
 
 msgid "everybody"
@@ -598,2 +598,12 @@
 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"
+
Index: /extensions/pLoader/trunk/src/Uploader/GUI/wxApp.pm
===================================================================
--- /extensions/pLoader/trunk/src/Uploader/GUI/wxApp.pm	(revision 4503)
+++ /extensions/pLoader/trunk/src/Uploader/GUI/wxApp.pm	(revision 4504)
@@ -134,5 +134,5 @@
     # to check if we can use stored cache
     $self->imagelist_version(
-        '10'
+        '11'
     );
 
@@ -560,4 +560,5 @@
 		reupload_action_properties => 2,
 		reupload_action_properties_m => 1,
+		display_mode => $self->user_defined_properties->{display_mode}||'Thumbnail and caption'
     };
 
@@ -693,5 +694,5 @@
             $self->imagelist->wx_thumb_size, 
             $self->imagelist->wx_thumb_size, 
-            1,
+            0,
             0
         )
Index: /extensions/pLoader/trunk/src/Uploader/GUI/wxChoiceFilteredPanel.pm
===================================================================
--- /extensions/pLoader/trunk/src/Uploader/GUI/wxChoiceFilteredPanel.pm	(revision 4503)
+++ /extensions/pLoader/trunk/src/Uploader/GUI/wxChoiceFilteredPanel.pm	(revision 4504)
@@ -71,5 +71,5 @@
     $self->_init_panel;
     $self->_init_properties($params);
-printf("%s, %s\n", $self, $self->GetId);
+
     $self->Refresh;
 
@@ -164,4 +164,5 @@
     my ( $self, $choices ) = @_;
 
+	$self->listchoices->Freeze;
     $self->listchoices->Clear;
     $self->id_lookup({});
@@ -181,4 +182,5 @@
     	$row++;	
     }@{$choices};
+	$self->listchoices->Thaw;
 
 }
@@ -205,10 +207,10 @@
     
     my $choices = $self->choices->();
+    $self->listchoices->Freeze;
     map {
         $self->listchoices->Check($row, 0) ;	
     	$row++;
     }@$choices;
-
-	
+    $self->listchoices->Thaw;
 }
 
@@ -220,4 +222,5 @@
     push @$selection, $self->id_from_name->{$selected} if defined $selected;
 
+    $self->listchoices->Freeze;
     map {
     	$self->listchoices->Check(
@@ -228,4 +231,5 @@
     }
     @{$selection};	
+    $self->listchoices->Thaw;
 }
 
Index: /extensions/pLoader/trunk/src/Uploader/GUI/wxFrameAUI.pm
===================================================================
--- /extensions/pLoader/trunk/src/Uploader/GUI/wxFrameAUI.pm	(revision 4503)
+++ /extensions/pLoader/trunk/src/Uploader/GUI/wxFrameAUI.pm	(revision 4504)
@@ -84,4 +84,5 @@
           upload_progressdlg
           imageviewer
+		  imageviewer_img
           tree
           tree_root
@@ -130,4 +131,7 @@
 		  dlg_piwigo_photo_properties
 		  piwigo_photo_properties_tags
+		  image_preview_refresh
+		  imageviewer_refresh
+		  imageviewer_item_refresh
       /;
 __PACKAGE__->mk_accessors( @properties );
@@ -180,4 +184,5 @@
         $params->{perspective}
     );
+
     
     $self->current_imageviewer_index(
@@ -297,4 +302,29 @@
     $self->_initImgTypes;   
 
+	# only refresh when calling event is finished
+	Wx::Event::EVT_UPDATE_UI(
+	    $self,
+	    $self,
+		sub {
+            my ( $self, $event ) = @_;
+    		if ( $self->image_preview_refresh and $self->image_preview->IsShown ){
+                $self->_image_preview_refresh; 
+                $self->image_preview->Refresh;
+				$self->image_preview_refresh(0);
+		    }
+			
+			if($self->imageviewer_refresh){
+			    $self->imageviewer->Refresh;
+				$self->imageviewer_refresh(0);
+			}
+
+			if($self->imageviewer_item_refresh){
+			    $self->imageviewer->ItemRefresh(
+				    $self->current_imageviewer_index
+				);
+				$self->imageviewer_item_refresh(0);
+			}
+		},
+	);
 
     $self->imageviewer->SelectItem(
@@ -333,13 +363,15 @@
 			$main::PHOTO_PROPERTIES_CAPTION => { 
 			                                       value => sub { $self->imagelist->current_image->site_name(@_) },
-												   frame_callback => sub { $self->imageviewer->Refresh() },
+												   frame_callback => sub { $self->imageviewer_item_refresh(1); },
 			                                   },
 		    $main::COMMENT => { label=>gettext("Comment :")},
 			$main::PHOTO_PROPERTIES_COMMENT => { 
 			                                       value => sub { $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->imagelist->current_image->site_author(@_) },
+												   frame_callback => sub { $self->imageviewer_item_refresh(1); },
 			                                   },
 		    $main::TAGS => { label=>gettext("Tags :")},
@@ -347,6 +379,7 @@
 			$main::PHOTO_PROPERTIES_CREATE_DATE => { 
 			                                       value => sub { $self->imagelist->current_image->create_date(@_) },
+												   frame_callback => sub { $self->imageviewer_item_refresh(1); },
 			                                   },
-		    $main::PRIVACY_LEVEL => { label=>gettext("Who can see the photo? :")},
+		    $main::PRIVACY_LEVEL => { label=>gettext("Who can see the photo?")},
 			$main::PHOTO_PROPERTIES_PRIVACY_LEVEL => {
                                                          selection => sub { $self->imagelist->current_image->privacy_level(@_)},
@@ -361,5 +394,5 @@
                 label          => gettext("Photo caption :"),
                 value          => sub { $self->imagelist->current_image->site_name(@_) },
-                frame_callback => sub { $self->imageviewer->Refresh() },
+                frame_callback => sub { $self->imageviewer_item_refresh(1) },
             },
             {
@@ -700,22 +733,4 @@
 }
 
-
-sub _destroy_settings_panels {
-    my ( $self ) = @_;
-
-
-
-    map {
-        $self->manager->DetachPane(
-            $_
-        );
-        $_->Show(0);
-        $_->Destroy;
-    }(
-        $self->notebook_global_settings,
-        $self->notebook_image_properties,
-    );
-}
-
 # 
 sub _initFrame {
@@ -934,4 +949,6 @@
                 parentwnd => $self,
                 imagelist => $self->imagelist,
+				image_size => $self->imagelist->wx_thumb_size,
+				columns => $self->piwigo_properties,
             }
         )
@@ -1452,4 +1469,5 @@
     Wx::Event::EVT_MENU( $self, 104, \&OnGlobalSettings );
     Wx::Event::EVT_MENU( $self, 105, \&OnChooseLanguage );
+    Wx::Event::EVT_CHOICE( $self, 106, \&OnPhotoSelMode );
     EVT_TREE_SEL_CHANGED( $self, $self->tree, \&OnTreeSelChanged );
     EVT_TREE_ITEM_RIGHT_CLICK( $self, $self->tree, \&OnTreeItemRightClick );
@@ -1748,4 +1766,5 @@
     );
     	
+    $self->dlg_piwigo_photo_properties->SetProperties;
     $self->image_prop_piwigo->Refresh;
 }
@@ -1764,8 +1783,7 @@
 sub OnImageViewerItemSelected {
     my( $self, $event ) = @_;
+
     my $bc = Wx::BusyCursor->new;
-
     my $indx = $event->GetIndex;
-
     $self->_on_imageviewer_item_selected($indx);
 
@@ -1783,9 +1801,8 @@
     );
 	
-	# image preview has a cost, don't do if useless.
-	if ( $self->image_preview->IsShown ){
-        $self->_image_preview_refresh; 
-        $self->image_preview->Refresh;
-	}
+	# process image_preview in idle time
+	# and when current event is processed
+	# see call to EVT_IDLE
+    $self->image_preview_refresh(1);
 
     $self->dlg_piwigo_photo_properties->SetProperties;
@@ -2107,5 +2124,5 @@
     my( $self ) = @_;
 
-    my $tb = Wx::ToolBar->new( $self, -1, wxDefaultPosition, wxDefaultSize, wxTB_FLAT );
+    my $tb = Wx::ToolBar->new( $self, -1, wxDefaultPosition, [600, -1], wxTB_FLAT );
     $tb->SetToolBitmapSize( wxSIZE( 32, 32 ) );
     map {
@@ -2183,15 +2200,41 @@
     
     );
-
-    if($@){
-    	undef $tb;
-    }
-    else{
-        $tb->Realize;
-    }
+	
+	$tb->AddSeparator;
+	
+	$tb->AddControl(
+	    Wx::Choice->new(
+		    $tb,
+			106,
+			wxDefaultPosition,
+			wxDefaultSize,
+			[],
+		)
+	);
+	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;
 
     return $tb;
 }
 
+sub OnPhotoSelMode {
+    my ( $self, $event )= @_;
+	
+	$self->imagelist->display_mode(
+	    $event->GetClientData
+	);
+
+	$self->imageviewer->change_display_mode(1);
+}
 
 sub _create_textctrl {
Index: /extensions/pLoader/trunk/src/Uploader/GUI/wxImageListCtrl.pm
===================================================================
--- /extensions/pLoader/trunk/src/Uploader/GUI/wxImageListCtrl.pm	(revision 4503)
+++ /extensions/pLoader/trunk/src/Uploader/GUI/wxImageListCtrl.pm	(revision 4504)
@@ -22,4 +22,5 @@
 use Wx;
 use Wx::DND;
+use POSIX qw(ceil floor);
 use Wx qw/
              wxDefaultPosition
@@ -29,4 +30,5 @@
              wxLC_EDIT_LABELS
              wxLC_ICON
+			 wxLC_REPORT
              wxLC_SMALL_ICON
              wxIMAGE_LIST_NORMAL
@@ -36,4 +38,5 @@
              wxLC_VIRTUAL
              wxLC_REPORT
+			 wxLC_AUTOARRANGE
              wxBORDER_THEME
              wxLIST_HITTEST_ONITEM
@@ -42,8 +45,10 @@
              wxLIST_STATE_DONTCARE
              wxLIST_STATE_FOCUSED 
+			 wxIMAGE_LIST_SMALL
          /;
 use Wx::Event qw/
                     EVT_LIST_BEGIN_DRAG
                     EVT_LIST_ITEM_SELECTED
+					EVT_SIZE
                 /;
          
@@ -54,30 +59,180 @@
           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,
-                                       wxDefaultSize,
-                                       wxNO_BORDER|
-                                       wxLC_ICON|
-                                       wxLC_EDIT_LABELS
-                                  );
-
-  $self->imagelist(
-      $params->{imagelist}
-  );
-
-                                  
-  $self->prevItemCount(-1);
-
-  EVT_LIST_BEGIN_DRAG( $self, $self, \&OnBeginDrag);
-
-
-  $self;
+    my( $class, $params ) = @_;
+
+  
+    my( $self ) = $class->SUPER::new(
+        $params->{parentwnd},
+        -1,
+        wxDefaultPosition,
+        wxDefaultSize,
+		wxNO_BORDER
+    );
+	
+	$self->wx_img(
+        Wx::ImageList->new( 16, 16, 1 )
+	);
+	$self->wx_img->Add(
+        Wx::Bitmap->new( '../res/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}
+	);
+	print Dumper $self->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);
+			}
+		}
+	);
+	
+	$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;
+                                    $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;
+}
+
+sub ItemRefresh {
+    my ( $self, $index ) = @_;
+	
+	$self->item_refresh->{$self->imagelist->display_mode}->($self, $index) if exists $self->item_refresh->{$self->imagelist->display_mode};
 }
 
@@ -141,17 +296,42 @@
 
 sub Refresh {
-    my ( $self, $wximagelist ) = @_;	
-
-   $self->SetImageList( $wximagelist, wxIMAGE_LIST_NORMAL ) if defined $wximagelist ;
+    my ( $self ) = @_;	
+
+   $self->Freeze();
    $self->DeleteAllItems;
    eval {
-       for( my $i = 0 ; $i < $self->GetImageList(wxIMAGE_LIST_NORMAL)->GetImageCount ; $i++){
-            my $indx = $self->InsertImageStringItem(
-                $i,
-                $self->imagelist->GetImage($i)->site_name,
-                $i,
-            );
+       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->imagelist->count ; $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;
 }
 
Index: /extensions/pLoader/trunk/src/Uploader/ImageList.pm
===================================================================
--- /extensions/pLoader/trunk/src/Uploader/ImageList.pm	(revision 4503)
+++ /extensions/pLoader/trunk/src/Uploader/ImageList.pm	(revision 4504)
@@ -126,4 +126,5 @@
 				reupload_action_properties_m
 				reupload_not_ask
+				display_mode
      /
 );
@@ -156,27 +157,4 @@
     
 }
-
-
-
-# save exif preview image if available
-# otherwise create a preview image
-sub _write_preview_image {
-    my ( $self, $imagedata ) = @_;
-
-
-    # If PreviewImage is available, we use it
-    if(defined $imagedata ) {
-        print "_write_preview_image, use exif PreviewImage\n";
-    	eval {
-            open PREVIEW_FILE, ">", $self->current_image->preview_file ;
-            binmode PREVIEW_FILE;
-            print PREVIEW_FILE $$imagedata;
-            close PREVIEW_FILE;
-        };
-        $self->last_error_msg($@) if $@;
-    }
-    
-}
-
 
 sub _set_exif_tag {
@@ -492,5 +470,4 @@
     );
 
-    printf("%sx%s%s\n", $size, $size, '^');
 
 	# maximize size and keep aspect ratio
@@ -516,5 +493,5 @@
         gravity=>'center',
     );
-
+	
     $image->Set(
         quality=>$self->wx_quality||90
@@ -774,4 +751,5 @@
 				reupload_action_properties
 				reupload_action_properties_m
+				display_mode
             /
         ] 
Index: /extensions/pLoader/trunk/src/ploader.pl
===================================================================
--- /extensions/pLoader/trunk/src/ploader.pl	(revision 4503)
+++ /extensions/pLoader/trunk/src/ploader.pl	(revision 4504)
@@ -27,8 +27,10 @@
 use Data::Dumper;
 
-#$SIG{__DIE__} = \&OnDieHandler;
+$SIG{__DIE__} = \&OnDieHandler;
 
 require '../res/progress_wdr.pl'; 
 require '../res/login_wdr.pl'; 
+require '../res/reupload_wdr.pl'; 
+require '../res/photo_properties_wdr.pl'; 
 print Dumper \@INC;
 eval {
