Index: /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/transverse/util/ImagesUtil.java
===================================================================
--- /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/transverse/util/ImagesUtil.java	(revision 6957)
+++ /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/transverse/util/ImagesUtil.java	(revision 6958)
@@ -1,19 +1,30 @@
 package fr.mael.jiwigo.transverse.util;
 
+import java.awt.Graphics;
 import java.awt.Graphics2D;
 import java.awt.GraphicsConfiguration;
 import java.awt.GraphicsDevice;
 import java.awt.GraphicsEnvironment;
+import java.awt.HeadlessException;
 import java.awt.Image;
 import java.awt.RenderingHints;
+import java.awt.Transparency;
 import java.awt.image.BufferedImage;
+import java.awt.image.ColorModel;
+import java.awt.image.PixelGrabber;
 import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileOutputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
-
+import java.util.Iterator;
+
+import javax.imageio.IIOImage;
 import javax.imageio.ImageIO;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.ImageWriter;
+import javax.imageio.stream.FileImageOutputStream;
+import javax.swing.ImageIcon;
 
 /**
@@ -123,7 +134,95 @@
 	graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
 	graphics2D.drawImage(image, 0, 0, width, height, null);
-	ImageIO.write(thumbImage, "jpg", new FileOutputStream(System.getProperty("java.io.tmpdir") + "/" + tempName));
+
+	//	ImageIO.write(thumbImage, "jpg", new FileOutputStream(System.getProperty("java.io.tmpdir") + "/" + tempName));
+	saveImage(System.getProperty("java.io.tmpdir") + "/" + tempName, thumbImage);
 	return true;
 
     }
+
+    private static void saveImage(String fileName, BufferedImage img) throws FileNotFoundException, IOException {
+	Iterator iter = ImageIO.getImageWritersByFormatName("jpeg");
+	ImageWriter writer = (ImageWriter) iter.next();
+	ImageWriteParam iwp = writer.getDefaultWriteParam();
+	iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
+	iwp.setCompressionQuality(1);
+	File outputfile = new File(fileName);
+	FileImageOutputStream output = new FileImageOutputStream(outputfile);
+	writer.setOutput(output);
+	IIOImage outimage = new IIOImage(img, null, null);
+	writer.write(null, outimage, iwp);
+	writer.dispose();
+    }
+
+    // This method returns a buffered image with the contents of an image
+    public static BufferedImage toBufferedImage(Image image) {
+	if (image instanceof BufferedImage) {
+	    return (BufferedImage) image;
+	}
+
+	// This code ensures that all the pixels in the image are loaded
+	image = new ImageIcon(image).getImage();
+
+	// Determine if the image has transparent pixels; for this method's
+	// implementation, see Determining If an Image Has Transparent Pixels
+	boolean hasAlpha = hasAlpha(image);
+
+	// Create a buffered image with a format that's compatible with the screen
+	BufferedImage bimage = null;
+	GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
+	try {
+	    // Determine the type of transparency of the new buffered image
+	    int transparency = Transparency.OPAQUE;
+	    if (hasAlpha) {
+		transparency = Transparency.BITMASK;
+	    }
+
+	    // Create the buffered image
+	    GraphicsDevice gs = ge.getDefaultScreenDevice();
+	    GraphicsConfiguration gc = gs.getDefaultConfiguration();
+	    bimage = gc.createCompatibleImage(image.getWidth(null), image.getHeight(null), transparency);
+	} catch (HeadlessException e) {
+	    // The system does not have a screen
+	}
+
+	if (bimage == null) {
+	    // Create a buffered image using the default color model
+	    int type = BufferedImage.TYPE_INT_RGB;
+	    if (hasAlpha) {
+		type = BufferedImage.TYPE_INT_ARGB;
+	    }
+	    bimage = new BufferedImage(image.getWidth(null), image.getHeight(null), type);
+	}
+
+	// Copy image to buffered image
+	Graphics g = bimage.createGraphics();
+
+	// Paint the image onto the buffered image
+	g.drawImage(image, 0, 0, null);
+	g.dispose();
+
+	return bimage;
+    }
+
+    // This method returns true if the specified image has transparent pixels
+    public static boolean hasAlpha(Image image) {
+	// If buffered image, the color model is readily available
+	if (image instanceof BufferedImage) {
+	    BufferedImage bimage = (BufferedImage) image;
+	    return bimage.getColorModel().hasAlpha();
+	}
+
+	// Use a pixel grabber to retrieve the image's color model;
+	// grabbing a single pixel is usually sufficient
+	PixelGrabber pg = new PixelGrabber(image, 0, 0, 1, 1, false);
+	try {
+	    pg.grabPixels();
+	} catch (InterruptedException e) {
+	}
+
+	// Get the image's color model
+	ColorModel cm = pg.getColorModel();
+	return cm.hasAlpha();
+    }
+
 }
Index: /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/transverse/util/Outil.java
===================================================================
--- /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/transverse/util/Outil.java	(revision 6957)
+++ /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/transverse/util/Outil.java	(revision 6958)
@@ -105,4 +105,5 @@
     public static Document stringToDocument(String string) throws JDOMException, IOException {
 	SAXBuilder sb = new SAXBuilder();
+	System.out.println(string);
 	Document doc = sb.build(new StringReader(string));
 	return doc;
Index: /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/ImagesManagement.java
===================================================================
--- /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/ImagesManagement.java	(revision 6957)
+++ /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/ImagesManagement.java	(revision 6958)
@@ -75,5 +75,6 @@
      */
     public static Image getCurrentImage() {
-	return LIST_IMAGE.get(CURRENT_IMAGE_INDEX);
+	//return LIST_IMAGE.get(CURRENT_IMAGE_INDEX);
+	return CURRENT_IMAGE;
     }
 
Index: /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/browser/BrowserFrame.java
===================================================================
--- /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/browser/BrowserFrame.java	(revision 6957)
+++ /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/browser/BrowserFrame.java	(revision 6958)
@@ -104,4 +104,9 @@
 
     /**
+     * rogner l'image
+     */
+    private JButton cut = new JButton();
+
+    /**
      * Panel qui contient l'image
      */
@@ -137,4 +142,5 @@
 	save.setIcon(new ImageIcon(Outil.getURL("fr/mael/jiwigo/img/save.png")));
 	comment.setIcon(new ImageIcon(Outil.getURL("fr/mael/jiwigo/img/comment.png")));
+	cut.setIcon(new ImageIcon(Outil.getURL("fr/mael/jiwigo/img/cut.png")));
 	//on rend les boutons invisibles, pour ne voir que l'image
 	next.setFocusPainted(false);
@@ -156,4 +162,7 @@
 	comment.setBorderPainted(false);
 	comment.setContentAreaFilled(false);
+	cut.setFocusPainted(false);
+	cut.setBorderPainted(false);
+	cut.setContentAreaFilled(false);
 	//ajout des action listeners
 	comment.addActionListener(this);
@@ -163,4 +172,5 @@
 	previous.addActionListener(this);
 	next.addActionListener(this);
+	cut.addActionListener(this);
 	//ajout des boutons
 	panelBoutons.add(previous);
@@ -168,4 +178,5 @@
 	panelBoutons.add(rotateLeft);
 	panelBoutons.add(rotateRight);
+	panelBoutons.add(cut);
 	panelBoutons.add(save);
 	panelBoutons.add(comment);
@@ -368,4 +379,6 @@
 	} else if (e.getSource().equals(menuItemNormal)) {
 	    imagePanel.zoomNormal();
+	} else if (e.getSource().equals(cut)) {
+	    imagePanel.rogner();
 	}
 
Index: /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/browser/BrowserImagePanel.java
===================================================================
--- /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/browser/BrowserImagePanel.java	(revision 6957)
+++ /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/browser/BrowserImagePanel.java	(revision 6958)
@@ -5,4 +5,7 @@
 import java.awt.Graphics2D;
 import java.awt.RenderingHints;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
 import java.awt.event.MouseWheelEvent;
 import java.awt.event.MouseWheelListener;
@@ -15,4 +18,5 @@
 
 import javax.swing.JLabel;
+import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 import javax.swing.JSlider;
@@ -21,4 +25,5 @@
 
 import fr.mael.jiwigo.transverse.util.ImagesUtil;
+import fr.mael.jiwigo.transverse.util.Messages;
 
 /**
@@ -52,5 +57,6 @@
  *
  */
-public class BrowserImagePanel extends JPanel implements MouseWheelListener, Printable {
+public class BrowserImagePanel extends JPanel implements MouseWheelListener, Printable, MouseMotionListener,
+	MouseListener {
     private BufferedImage image;
     private double scale = 1.0;
@@ -58,4 +64,10 @@
     boolean flipV = false;
     private int valueSlider = 16;
+    private boolean clicked = false;
+    private int xTopPosition;
+    private int yTopPosition;
+    private int xDragPosition;
+    private int yDragPosition;
+    private boolean drawSelection = false;
 
     /**
@@ -66,4 +78,6 @@
 	this.image = image;
 	this.addMouseWheelListener(this);
+	this.addMouseMotionListener(this);
+	this.addMouseListener(this);
     }
 
@@ -90,6 +104,8 @@
 	    at.scale(scale, scale);
 	}
-
 	g2.drawRenderedImage(image, at);
+	if (drawSelection) {
+	    g2.drawRect(xTopPosition, yTopPosition, xDragPosition - xTopPosition, yDragPosition - yTopPosition);
+	}
 
     }
@@ -102,4 +118,59 @@
 	int h = (int) (scale * image.getHeight());
 	return new Dimension(w, h);
+    }
+
+    public void rogner() {
+	if (scale == 1.0) {
+	    //récupération des dimensions de l'image
+	    Double width = getSize().getWidth();
+	    Double height = getSize().getHeight();
+	    //recuperation du coin haut gauche de l'image
+	    Double xZeroImage = ((width - image.getWidth()) / 2);
+	    Double yZeroImage = ((height - image.getHeight()) / 2);
+	    //les positions du premier clic
+	    //sur l'image. Les positions récupérées précédemment étaient
+	    //les positions sur le panel, il faut donc calculer les positions sur l'image
+	    int positionX, positionY;
+	    //largeur et longueur du rognage sur l'image
+	    int largeur, longueur;
+	    //si jamais la sélection commence avant le début de l'image 
+	    //en x, on prend comme position 0, sinon, on calcule la position
+	    //du clic selon le calcul position sur l'image = position sur le panel - position du x de l'image
+	    if (xTopPosition - xZeroImage.intValue() < 0) {
+		positionX = 0;
+	    } else {
+		positionX = xTopPosition - xZeroImage.intValue();
+	    }
+	    //si jamais la sélection commence avant le début de l'image 
+	    //en y, on prend comme position 0, sinon, on calcule la position
+	    //du clic selon le calcul position sur l'image = position sur le panel - position du y de l'image
+	    if (yTopPosition - yZeroImage.intValue() < 0) {
+		positionY = 0;
+	    } else {
+		positionY = yTopPosition - yZeroImage.intValue();
+	    }
+	    //on calcule la largeur
+	    largeur = xDragPosition - xTopPosition;
+	    //si ça dépasse de l'image
+	    if ((positionX + largeur) > image.getWidth()) {
+		//on recalcule la largeur
+		largeur = image.getWidth() - positionX;
+	    }
+	    //on calcule la longueur
+	    longueur = yDragPosition - yTopPosition;
+	    //si ça dépasse en hauteur
+	    if ((positionY + longueur) > image.getHeight()) {
+		//on recalcule la hauteur
+		longueur = image.getHeight() - positionY;
+	    }
+	    //recuperation de l'image coupée
+	    image = image.getSubimage(positionX, positionY, largeur, longueur);
+	    repaint();
+	    revalidate();
+	    drawSelection = false;
+	} else {
+	    JOptionPane.showMessageDialog(this, Messages.getMessage("clippingError"), Messages.getMessage("info"),
+		    JOptionPane.INFORMATION_MESSAGE);
+	}
     }
 
@@ -237,3 +308,37 @@
     }
 
+    @Override
+    public void mouseDragged(MouseEvent arg0) {
+	if (clicked) {
+	    xDragPosition = arg0.getX();
+	    yDragPosition = arg0.getY();
+	    repaint();
+	    revalidate();
+	}
+    }
+
+    @Override
+    public void mouseMoved(MouseEvent arg0) {
+    }
+
+    public void mouseClicked(MouseEvent arg0) {
+    }
+
+    public void mouseEntered(MouseEvent arg0) {
+    }
+
+    public void mouseExited(MouseEvent arg0) {
+    }
+
+    public void mousePressed(MouseEvent arg0) {
+	clicked = true;
+	xTopPosition = arg0.getX();
+	yTopPosition = arg0.getY();
+	drawSelection = true;
+    }
+
+    public void mouseReleased(MouseEvent arg0) {
+	clicked = false;
+    }
+
 }
Index: /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/layout/VerticalLayout.java
===================================================================
--- /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/layout/VerticalLayout.java	(revision 6958)
+++ /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/layout/VerticalLayout.java	(revision 6958)
@@ -0,0 +1,143 @@
+package fr.mael.jiwigo.ui.layout;
+
+/**
+ * 
+ */
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Insets;
+import java.awt.LayoutManager;
+
+/**
+ * @author Gérard Bourriaud dit JHelp
+ * @version 1.0
+ */
+
+/**
+ * Layout pour placer les élémnts en vertical
+ */
+public class VerticalLayout implements LayoutManager {
+
+    //Nombre de pixels de vide entre le composant et le bord du conteneur en horizontal
+    private int espaceHorizontal = 1;
+    //Nombre de pixels de vide entre le composant et le bord du conteneur en vertical
+    private int espaceVertical = 1;
+
+    /**
+     * Layout vertical par défaut
+     */
+    public VerticalLayout() {
+    }
+
+    /**
+     * LayoutVertical en présisant les écart avec le bord
+     */
+    public VerticalLayout(int espaceHorizontal, int espaceVertical) {
+	this.espaceHorizontal = espaceHorizontal;
+	this.espaceVertical = espaceVertical;
+    }
+
+    /**
+     * Ajoute un composant avec une contrainte particuliére, inutile ici, mias laissé pour implémenté l'interface LayoutManager
+     */
+    public void addLayoutComponent(String name, Component comp) {
+    }
+
+    /**
+     * Retire un composant du rendu, inutile ici, mias laissé pour implémenté l'interface LayoutManager
+     */
+    public void removeLayoutComponent(Component comp) {
+    }
+
+    /**
+     * Calcul la dimension préférée du conteneur en paramètre
+     */
+    public Dimension preferredLayoutSize(Container parent) {
+	//On récupère le nombre de composant contenus
+	int nb = parent.getComponentCount();
+	//On initialise la réponse
+	Dimension reponse = new Dimension(0, 0);
+	//Pour chaque composant dans le conteneur
+	for (int i = 0; i < nb; i++) {
+	    //Si le composant actuel est affiché
+	    if (parent.getComponent(i).isVisible()) {
+		//On récupère les dimensions préférées du composant actuel
+		Dimension actuel = parent.getComponent(i).getPreferredSize();
+		//La largeur totale est le maximum des largeurs
+		if (reponse.width < actuel.width)
+		    reponse.width = actuel.width;
+		//On ajoute la hauteur du composant actuel
+		reponse.height += actuel.height;
+	    }
+	}
+	//On tiens en compte des divers décalages
+	Insets insets = parent.getInsets();
+	reponse.width += insets.right + insets.left + espaceHorizontal * 2;
+	reponse.height += insets.top + insets.bottom + espaceVertical * 2;
+	//On renvoie la réponse
+	return reponse;
+    }
+
+    /**
+     * Calcul la dimension minimale du conteneur en paramètre
+     */
+    public Dimension minimumLayoutSize(Container parent) {
+	//On récupère le nombre de composant contenus
+	int nb = parent.getComponentCount();
+	//On initialise la réponse
+	Dimension reponse = new Dimension(0, 0);
+	//Pour chaque composant dans le conteneur
+	for (int i = 0; i < nb; i++) {
+	    //Si le composant actuel est affiché
+	    if (parent.getComponent(i).isVisible()) {
+		//On récupère les dimensions minimales du composant actuel
+		Dimension actuel = parent.getComponent(i).getMinimumSize();
+		//La largeur totale est le maximum des largeurs
+		if (reponse.width < actuel.width)
+		    reponse.width = actuel.width;
+		//On ajoute la hauteur du composant actuel
+		reponse.height += actuel.height + espaceVertical;
+	    }
+	}
+	//On tiens en compte des divers décalages
+	Insets insets = parent.getInsets();
+	reponse.width += insets.right + insets.left + espaceHorizontal * 2;
+	reponse.height += insets.top + insets.bottom + espaceVertical * 2;
+	//On renvoie la réponse
+	return reponse;
+    }
+
+    /**
+     * Place les composants dans le conteneur
+     */
+    public void layoutContainer(Container parent) {
+	//On se synchronize sur le conteneur pour éviter des défauts d'affichage
+	synchronized (parent.getTreeLock()) {
+	    //On récupère le décalage du conteneur
+	    Insets insets = parent.getInsets();
+	    //On récupère le nombre de composants contenus dans le conteneur
+	    int nb = parent.getComponentCount();
+	    //On initialise les coordonées de placement
+	    int y = espaceHorizontal + insets.top;
+	    //Pour chaque composant du conteneur
+	    for (int i = 0; i < nb; i++) {
+		//Si le composant actuel est visible
+		if (parent.getComponent(i).isVisible()) {
+		    //On récupére la taille préferée du composant
+		    Dimension d = parent.getComponent(i).getPreferredSize();
+		    //On donne au composant sa taille préférée
+		    parent.getComponent(i).setSize(d);
+		    //On place le composant
+		    Dimension dim = parent.getSize();
+		    int widthParent = dim.width;
+		    int largeur = parent.getComponent(i).getSize().width;
+		    int x = (widthParent - largeur) / 2;
+		    parent.getComponent(i).setLocation(x, y);
+		    //On décale les ordonées pour le prochain composant
+		    y += d.height + espaceVertical;
+		}
+	    }
+	}
+    }
+}
Index: /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/mainframe/CategoriesTree.java
===================================================================
--- /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/mainframe/CategoriesTree.java	(revision 6957)
+++ /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/mainframe/CategoriesTree.java	(revision 6958)
@@ -124,5 +124,6 @@
 	Object catSelectionnee = node.getUserObject();
 	Category category = (Category) catSelectionnee;
-	MainFrame.imagesPanel.rafraichir(category.getIdentifiant(), false);
+	//MainFrame.imagesPanel.rafraichir(category.getIdentifiant(), false);
+	MainFrame.getInstance().addTabb(new ThumbnailCategoryPanel(category));
     }
 
Index: /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/mainframe/MainFrame.java
===================================================================
--- /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/mainframe/MainFrame.java	(revision 6957)
+++ /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/mainframe/MainFrame.java	(revision 6958)
@@ -6,5 +6,7 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
-
+import java.util.HashMap;
+
+import javax.swing.ImageIcon;
 import javax.swing.JComponent;
 import javax.swing.JFrame;
@@ -20,4 +22,5 @@
 import fr.mael.jiwigo.transverse.util.Messages;
 import fr.mael.jiwigo.transverse.util.Outil;
+import fr.mael.jiwigo.ui.mainframe.tab.JTabbedPaneWithCloseIcons;
 
 /**
@@ -100,4 +103,8 @@
     private JProgressBar progressBar;
 
+    private JTabbedPaneWithCloseIcons tabbedPane;
+
+    private HashMap<Integer, Integer> mapsIdPos = new HashMap<Integer, Integer>();
+
     /**
      * @return le singleton
@@ -114,5 +121,5 @@
      */
     private MainFrame() {
-	this.setTitle("Piwigo v" + Messages.getMessage("version"));
+	this.setTitle("Jiwigo v" + Messages.getMessage("version"));
 	this.setIconImage(java.awt.Toolkit.getDefaultToolkit().getImage(Outil.getURL("fr/mael/jiwigo/img/icon.png")));
 	this.setLayout(new BorderLayout());
@@ -122,12 +129,15 @@
 	categoriesTree = new CategoriesTree();
 	splitPane.setLeftComponent(categoriesTree);
-	imagesPanel = new ThumbnailCategoryPanel(null);
-	reduceSizeOfComponent(imagesPanel);
-	scrollPaneImagesPanel = new JScrollPane(imagesPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
-		JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-	scrollPaneImagesPanel.setPreferredSize(new Dimension(900, 700));
-	splitPane.setRightComponent(scrollPaneImagesPanel);
-
-	this.add(splitPane, BorderLayout.WEST);
+	//	imagesPanel = new ThumbnailCategoryPanel(null);
+	//	reduceSizeOfComponent(imagesPanel);
+	//	scrollPaneImagesPanel = new JScrollPane(imagesPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+	//		JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+	//	scrollPaneImagesPanel.setPreferredSize(new Dimension(900, 600));
+
+	tabbedPane = new JTabbedPaneWithCloseIcons();
+	//	tabbedPane.add(scrollPaneImagesPanel);
+	splitPane.setRightComponent(tabbedPane);
+
+	this.add(splitPane, BorderLayout.CENTER);
 	JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
 	progressBar = new JProgressBar(0, 100);
@@ -143,8 +153,37 @@
 	this.setJMenuBar(jMenuBar);
 	this.add(panel, BorderLayout.SOUTH);
-	this.pack();
+	//	this.pack();
+	this.setSize(900, 600);
 	this.setLocationRelativeTo(null);
 	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-	this.setResizable(false);
+	this.setResizable(true);
+    }
+
+    public void addTabb(ThumbnailCategoryPanel panel) {
+	JScrollPane scrollPaneImagesPanel = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+		JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+	scrollPaneImagesPanel.setPreferredSize(new Dimension(900, 600));
+	boolean found = false;
+	for (int i = 0; i < tabbedPane.getTabCount(); i++) {
+	    JScrollPane scroll = (JScrollPane) tabbedPane.getComponentAt(i);
+	    ThumbnailCategoryPanel thumbPan = (ThumbnailCategoryPanel) scroll.getViewport().getComponents()[0];
+	    if (thumbPan.getCategory().getIdentifiant().equals(panel.getCategory().getIdentifiant())) {
+		tabbedPane.setSelectedIndex(i);
+		found = true;
+		break;
+	    }
+	}
+	if (!found) {
+	    tabbedPane.addTab(panel.getCategory().getNom(), scrollPaneImagesPanel, new ImageIcon(Outil
+		    .getURL("fr/mael/jiwigo/img/closetab.png")));
+	}
+
+	//	if (mapsIdPos.get(panel.getCategory().getIdentifiant()) == null) {
+	//	    tabbedPane.addTab(panel.getCategory().getNom(), scrollPaneImagesPanel);
+	//	    mapsIdPos.put(panel.getCategory().getIdentifiant(), tabbedPane.getTabCount() - 1);
+	//	} else {
+	//	    tabbedPane.setSelectedIndex(mapsIdPos.get(panel.getCategory().getIdentifiant()));
+	//	}
+
     }
 
@@ -191,3 +230,10 @@
     }
 
+    /**
+     * @return the mapsIdPos
+     */
+    public HashMap<Integer, Integer> getMapsIdPos() {
+	return mapsIdPos;
+    }
+
 }
Index: /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/mainframe/ThumbnailCategoryPanel.java
===================================================================
--- /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/mainframe/ThumbnailCategoryPanel.java	(revision 6957)
+++ /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/mainframe/ThumbnailCategoryPanel.java	(revision 6958)
@@ -7,4 +7,5 @@
 import javax.swing.JPanel;
 
+import fr.mael.jiwigo.om.Category;
 import fr.mael.jiwigo.om.Image;
 import fr.mael.jiwigo.service.ImageService;
@@ -54,4 +55,11 @@
      */
     private Integer categoryId;
+
+    private Category category;
+
+    public ThumbnailCategoryPanel(Category category) {
+	this(category.getIdentifiant());
+	this.category = category;
+    }
 
     /**
@@ -111,4 +119,18 @@
     public void setCategoryId(Integer categoryId) {
 	this.categoryId = categoryId;
+    }
+
+    /**
+     * @return the category
+     */
+    public Category getCategory() {
+	return category;
+    }
+
+    /**
+     * @param category the category to set
+     */
+    public void setCategory(Category category) {
+	this.category = category;
     }
 
Index: /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/mainframe/ThumbnailPanel.java
===================================================================
--- /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/mainframe/ThumbnailPanel.java	(revision 6957)
+++ /extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/mainframe/ThumbnailPanel.java	(revision 6958)
@@ -94,5 +94,5 @@
 	    new BrowserFrame(image);
 	} catch (Exception e) {
-
+	    e.printStackTrace();
 	}
 
Index: /extensions/jiwigo/trunk/src/main/resources/fr/mael/jiwigo/trad/messages.properties
===================================================================
--- /extensions/jiwigo/trunk/src/main/resources/fr/mael/jiwigo/trad/messages.properties	(revision 6957)
+++ /extensions/jiwigo/trunk/src/main/resources/fr/mael/jiwigo/trad/messages.properties	(revision 6958)
@@ -11,4 +11,5 @@
 hits=Hits
 loadingOk=Loading ok
+info=Info
 
 #####################################################
@@ -32,4 +33,7 @@
 #####################################################
 thumbviewer_loading=Loading thumbnails. Please wait...
+thumbviewer_close=Close
+thumbviewer_closeOthers=Close others
+thumbviewer_closeAll=Close all
 
 #####################################################
@@ -46,4 +50,5 @@
 preferencesCheckValues=Please check the values
 preferencesUnexpectedError=<html>An unexpected error happened. Preferences won't be updated</html>
+clippingError=Clipping does not work with zoom
 
 #####################################################
Index: /extensions/jiwigo/trunk/src/main/resources/fr/mael/jiwigo/trad/messages_en.properties
===================================================================
--- /extensions/jiwigo/trunk/src/main/resources/fr/mael/jiwigo/trad/messages_en.properties	(revision 6957)
+++ /extensions/jiwigo/trunk/src/main/resources/fr/mael/jiwigo/trad/messages_en.properties	(revision 6958)
@@ -11,4 +11,5 @@
 hits=Hits
 loadingOk=Loading ok
+info=Info
 
 #####################################################
@@ -32,4 +33,7 @@
 #####################################################
 thumbviewer_loading=Loading thumbnails. Please wait...
+thumbviewer_close=Close
+thumbviewer_closeOthers=Close others
+thumbviewer_closeAll=Close all
 
 #####################################################
@@ -46,4 +50,5 @@
 preferencesCheckValues=Please check the values
 preferencesUnexpectedError=<html>An unexpected error happened. Preferences won't be updated</html>
+clippingError=Clipping does not work with zoom
 
 #####################################################
Index: /extensions/jiwigo/trunk/src/main/resources/fr/mael/jiwigo/trad/messages_fr.properties
===================================================================
--- /extensions/jiwigo/trunk/src/main/resources/fr/mael/jiwigo/trad/messages_fr.properties	(revision 6957)
+++ /extensions/jiwigo/trunk/src/main/resources/fr/mael/jiwigo/trad/messages_fr.properties	(revision 6958)
@@ -3,5 +3,5 @@
 #####################################################
 error=Erreur
-welcomeMessage=Bienvenue dans jiwigo
+welcomeMessage=Bienvenue dans Jiwigo
 version=0.11b
 commentaires=Commentaires
@@ -11,4 +11,5 @@
 hits=Hits
 loadingOk=Chargement réussi
+info=Info
 
 #####################################################
@@ -32,4 +33,7 @@
 #####################################################
 thumbviewer_loading=Chargement des miniatures, veuillez patienter
+thumbviewer_close=Fermer
+thumbviewer_closeOthers=Fermer les autres
+thumbviewer_closeAll=Fermer tous
 
 
@@ -47,4 +51,5 @@
 preferencesCheckValues=Veuillez vérifier les valeurs entrées
 preferencesUnexpectedError=<html>Une erreur inattendue s'est produite. Les préférences ne seront<br/>probablement pas mises à jour</html>
+clippingError=Le rognage ne fonctionne pas avec le zoom
 
 #####################################################
