source: extensions/jiwigo/trunk/src/main/java/fr/mael/jiwigo/ui/layout/VerticalLayout.java @ 6958

Last change on this file since 6958 was 6958, checked in by mlg, 14 years ago

New features

  • When clicking on a category, the category is opened in a tab. When clicking on the same category again, no tab is opened but the previously opened tab is shown. The user can close the tabs (close current tab, close others, close all).
  • Ability to clip the images. There are still some bugs (unable to clip the images when zooming, and the rectangle stays when changing the image).
File size: 4.7 KB
Line 
1package fr.mael.jiwigo.ui.layout;
2
3/**
4 *
5 */
6import java.awt.Component;
7import java.awt.Container;
8import java.awt.Dimension;
9import java.awt.Insets;
10import java.awt.LayoutManager;
11
12/**
13 * @author Gérard Bourriaud dit JHelp
14 * @version 1.0
15 */
16
17/**
18 * Layout pour placer les élémnts en vertical
19 */
20public class VerticalLayout implements LayoutManager {
21
22    //Nombre de pixels de vide entre le composant et le bord du conteneur en horizontal
23    private int espaceHorizontal = 1;
24    //Nombre de pixels de vide entre le composant et le bord du conteneur en vertical
25    private int espaceVertical = 1;
26
27    /**
28     * Layout vertical par défaut
29     */
30    public VerticalLayout() {
31    }
32
33    /**
34     * LayoutVertical en présisant les écart avec le bord
35     */
36    public VerticalLayout(int espaceHorizontal, int espaceVertical) {
37        this.espaceHorizontal = espaceHorizontal;
38        this.espaceVertical = espaceVertical;
39    }
40
41    /**
42     * Ajoute un composant avec une contrainte particuliére, inutile ici, mias laissé pour implémenté l'interface LayoutManager
43     */
44    public void addLayoutComponent(String name, Component comp) {
45    }
46
47    /**
48     * Retire un composant du rendu, inutile ici, mias laissé pour implémenté l'interface LayoutManager
49     */
50    public void removeLayoutComponent(Component comp) {
51    }
52
53    /**
54     * Calcul la dimension préférée du conteneur en paramètre
55     */
56    public Dimension preferredLayoutSize(Container parent) {
57        //On récupère le nombre de composant contenus
58        int nb = parent.getComponentCount();
59        //On initialise la réponse
60        Dimension reponse = new Dimension(0, 0);
61        //Pour chaque composant dans le conteneur
62        for (int i = 0; i < nb; i++) {
63            //Si le composant actuel est affiché
64            if (parent.getComponent(i).isVisible()) {
65                //On récupère les dimensions préférées du composant actuel
66                Dimension actuel = parent.getComponent(i).getPreferredSize();
67                //La largeur totale est le maximum des largeurs
68                if (reponse.width < actuel.width)
69                    reponse.width = actuel.width;
70                //On ajoute la hauteur du composant actuel
71                reponse.height += actuel.height;
72            }
73        }
74        //On tiens en compte des divers décalages
75        Insets insets = parent.getInsets();
76        reponse.width += insets.right + insets.left + espaceHorizontal * 2;
77        reponse.height += insets.top + insets.bottom + espaceVertical * 2;
78        //On renvoie la réponse
79        return reponse;
80    }
81
82    /**
83     * Calcul la dimension minimale du conteneur en paramètre
84     */
85    public Dimension minimumLayoutSize(Container parent) {
86        //On récupère le nombre de composant contenus
87        int nb = parent.getComponentCount();
88        //On initialise la réponse
89        Dimension reponse = new Dimension(0, 0);
90        //Pour chaque composant dans le conteneur
91        for (int i = 0; i < nb; i++) {
92            //Si le composant actuel est affiché
93            if (parent.getComponent(i).isVisible()) {
94                //On récupère les dimensions minimales du composant actuel
95                Dimension actuel = parent.getComponent(i).getMinimumSize();
96                //La largeur totale est le maximum des largeurs
97                if (reponse.width < actuel.width)
98                    reponse.width = actuel.width;
99                //On ajoute la hauteur du composant actuel
100                reponse.height += actuel.height + espaceVertical;
101            }
102        }
103        //On tiens en compte des divers décalages
104        Insets insets = parent.getInsets();
105        reponse.width += insets.right + insets.left + espaceHorizontal * 2;
106        reponse.height += insets.top + insets.bottom + espaceVertical * 2;
107        //On renvoie la réponse
108        return reponse;
109    }
110
111    /**
112     * Place les composants dans le conteneur
113     */
114    public void layoutContainer(Container parent) {
115        //On se synchronize sur le conteneur pour éviter des défauts d'affichage
116        synchronized (parent.getTreeLock()) {
117            //On récupère le décalage du conteneur
118            Insets insets = parent.getInsets();
119            //On récupère le nombre de composants contenus dans le conteneur
120            int nb = parent.getComponentCount();
121            //On initialise les coordonées de placement
122            int y = espaceHorizontal + insets.top;
123            //Pour chaque composant du conteneur
124            for (int i = 0; i < nb; i++) {
125                //Si le composant actuel est visible
126                if (parent.getComponent(i).isVisible()) {
127                    //On récupére la taille préferée du composant
128                    Dimension d = parent.getComponent(i).getPreferredSize();
129                    //On donne au composant sa taille préférée
130                    parent.getComponent(i).setSize(d);
131                    //On place le composant
132                    Dimension dim = parent.getSize();
133                    int widthParent = dim.width;
134                    int largeur = parent.getComponent(i).getSize().width;
135                    int x = (widthParent - largeur) / 2;
136                    parent.getComponent(i).setLocation(x, y);
137                    //On décale les ordonées pour le prochain composant
138                    y += d.height + espaceVertical;
139                }
140            }
141        }
142    }
143}
Note: See TracBrowser for help on using the repository browser.