Statistiques
| Révision :

root / tmp / org.txm.analec.rcp / src matt / visuAnalec / PanneauChamps.java @ 3093

Historique | Voir | Annoter | Télécharger (4,35 ko)

1 481 mdecorde
/*
2 481 mdecorde
 * To change this template, choose Tools | Templates
3 481 mdecorde
 * and open the template in the editor.
4 481 mdecorde
 */
5 481 mdecorde
package visuAnalec;
6 481 mdecorde
7 481 mdecorde
import java.awt.*;
8 481 mdecorde
import java.awt.event.ActionEvent;
9 481 mdecorde
import java.awt.event.ActionListener;
10 481 mdecorde
import java.util.*;
11 481 mdecorde
import javax.swing.*;
12 481 mdecorde
import javax.swing.border.*;
13 481 mdecorde
import visuAnalec.elements.*;
14 481 mdecorde
import visuAnalec.util.*;
15 481 mdecorde
import visuAnalec.vue.*;
16 481 mdecorde
17 481 mdecorde
/**
18 481 mdecorde
 *
19 481 mdecorde
 * @author Bernard Victorri
20 481 mdecorde
 */
21 481 mdecorde
public class PanneauChamps extends JPanel {
22 481 mdecorde
  ArrayList<GChamp> champs = new ArrayList<GChamp>();
23 481 mdecorde
  private Vue vue;
24 481 mdecorde
  private Element element = null;
25 481 mdecorde
  private Class<? extends Element> classe = null;
26 481 mdecorde
  private String type = null;
27 481 mdecorde
  private JPanel cadre;
28 481 mdecorde
  public PanneauChamps(PanneauEditeur pEdit, Vue vue) {
29 481 mdecorde
    super(new BorderLayout());
30 481 mdecorde
    setBorder(new TitledBorder("Champs"));
31 481 mdecorde
    cadre = new JPanel(new GridLayout(0, 1));
32 481 mdecorde
    JScrollPane scroll = new JScrollPane(cadre);
33 481 mdecorde
    add(scroll, BorderLayout.CENTER);
34 481 mdecorde
    this.vue = vue;
35 481 mdecorde
  }
36 481 mdecorde
  void reafficher() {
37 481 mdecorde
    if (element == null) return;
38 481 mdecorde
    type = null;
39 481 mdecorde
    afficher(element);
40 481 mdecorde
  }
41 481 mdecorde
  void afficher(Element elt) {
42 481 mdecorde
    this.element = elt;
43 481 mdecorde
    if (elt.getClass() != classe || !elt.getType().equals(type)) {
44 481 mdecorde
      type = elt.getType();
45 481 mdecorde
      classe = elt.getClass();
46 481 mdecorde
      afficherTouslesChamps();
47 481 mdecorde
    }
48 481 mdecorde
    ((TitledBorder) getBorder()).setTitle("Champs " + GVisu.getNomDeLaClasse(elt) + " :  \"" +
49 481 mdecorde
            vue.getIdElement(elt) + "\"");
50 481 mdecorde
    for (GChamp gc : champs) {
51 481 mdecorde
      gc.afficher(elt);
52 481 mdecorde
    }
53 481 mdecorde
    revalidate();
54 481 mdecorde
    repaint();
55 481 mdecorde
  }
56 481 mdecorde
  void effacer() {
57 481 mdecorde
    cadre.removeAll();
58 481 mdecorde
    type = null;
59 481 mdecorde
    element = null;
60 481 mdecorde
    ((TitledBorder) getBorder()).setTitle("Champs");
61 481 mdecorde
    revalidate();
62 481 mdecorde
    repaint();
63 481 mdecorde
  }
64 481 mdecorde
  private void afficherTouslesChamps() {
65 481 mdecorde
    cadre.removeAll();
66 481 mdecorde
    champs.clear();
67 481 mdecorde
68 481 mdecorde
    int niveau = 0;
69 481 mdecorde
    for (String[] champsniveau : vue.getChamps(classe, type)) {
70 481 mdecorde
      JPanel panneauniveau = new JPanel();
71 481 mdecorde
 //     panneauniveau.setBorder(new TitledBorder("Niveau " + ++niveau));
72 481 mdecorde
      for (String champ : champsniveau) {
73 481 mdecorde
        GChamp gc = new GChamp(vue, classe, type, champ);
74 481 mdecorde
        champs.add(gc);
75 481 mdecorde
        panneauniveau.add(gc);
76 481 mdecorde
      }
77 481 mdecorde
      cadre.add(panneauniveau);
78 481 mdecorde
    }
79 481 mdecorde
  }
80 481 mdecorde
81 481 mdecorde
  private static class GChamp extends JPanel implements ActionListener {
82 481 mdecorde
    JComboBox afficheValeurChamp;
83 481 mdecorde
    Vue vue;
84 481 mdecorde
    Class<? extends Element> classe;
85 481 mdecorde
    String type;
86 481 mdecorde
    String champ;
87 481 mdecorde
    Element element = null;
88 481 mdecorde
    GChamp(Vue vue, Class<? extends Element> classe, String type, String champ) {
89 481 mdecorde
      super();
90 481 mdecorde
      this.vue = vue;
91 481 mdecorde
      this.classe = classe;
92 481 mdecorde
      this.type = type;
93 481 mdecorde
      this.champ = champ;
94 481 mdecorde
      Box groupe = Box.createVerticalBox();
95 481 mdecorde
      Box titre = Box.createHorizontalBox();
96 481 mdecorde
      titre.add(Box.createHorizontalGlue());
97 481 mdecorde
      JLabel label = new JLabel(champ, JLabel.CENTER);
98 481 mdecorde
 //     label.setPreferredSize(new Dimension(50, 10));
99 481 mdecorde
      titre.add(label);
100 481 mdecorde
      titre.add(Box.createHorizontalGlue());
101 481 mdecorde
      groupe.add(titre);
102 481 mdecorde
      groupe.add(Box.createVerticalStrut(2));
103 481 mdecorde
      afficheValeurChamp = new JComboBox(vue.getValeursChamp(classe, type, champ));
104 481 mdecorde
      afficheValeurChamp.setEditable(vue.isChampModifiable(classe, type, champ));
105 481 mdecorde
      afficheValeurChamp.addActionListener(this);
106 481 mdecorde
      groupe.add(afficheValeurChamp);
107 481 mdecorde
      add(groupe);
108 481 mdecorde
    }
109 481 mdecorde
    void afficher(Element elt) {
110 481 mdecorde
      this.element = elt;
111 481 mdecorde
      afficheValeurChamp.removeActionListener(this);
112 481 mdecorde
      String val = vue.getValeurChamp(elt, champ);
113 481 mdecorde
      if (val.isEmpty()) afficheValeurChamp.setSelectedIndex(-1);
114 481 mdecorde
      else afficheValeurChamp.setSelectedItem(val);
115 481 mdecorde
      afficheValeurChamp.addActionListener(this);
116 481 mdecorde
    }
117 481 mdecorde
    public void actionPerformed(ActionEvent evt) {
118 481 mdecorde
      try {
119 481 mdecorde
        if (!afficheValeurChamp.isEditable()) {
120 481 mdecorde
          JOptionPane.showMessageDialog(getTopLevelAncestor(), "Champ non modifiable pour ce type d'éléments",
121 481 mdecorde
                  "Modification impossible", JOptionPane.ERROR_MESSAGE);
122 481 mdecorde
          afficher(element);
123 481 mdecorde
          return;
124 481 mdecorde
        }
125 481 mdecorde
        String newval = ((String) afficheValeurChamp.getSelectedItem());
126 481 mdecorde
        if (newval == null) newval = "";
127 481 mdecorde
        else newval = newval.trim();
128 481 mdecorde
        if (!vue.setValeurChamp(element, champ, newval)) {
129 481 mdecorde
          JOptionPane.showMessageDialog(getTopLevelAncestor(), "Champ non défini pour cet élément",
130 481 mdecorde
                  "Saisie de valeur de champ impossible", JOptionPane.ERROR_MESSAGE);
131 481 mdecorde
          afficher(element);
132 481 mdecorde
        }
133 481 mdecorde
      } catch (Throwable ex) {
134 481 mdecorde
        GMessages.erreurFatale(ex);
135 481 mdecorde
      }
136 481 mdecorde
    }
137 481 mdecorde
  }
138 481 mdecorde
}