Statistiques
| Révision :

root / tmp / org.txm.analec.rcp / src matt / visuAnalec / PanneauEditeur.java @ 481

Historique | Voir | Annoter | Télécharger (12,76 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.util.*;
9 481 mdecorde
import javax.swing.*;
10 481 mdecorde
import javax.swing.border.*;
11 481 mdecorde
import javax.swing.text.Document;
12 481 mdecorde
import javax.swing.text.SimpleAttributeSet;
13 481 mdecorde
import javax.swing.text.StyleConstants;
14 481 mdecorde
import visuAnalec.Message.*;
15 481 mdecorde
import visuAnalec.elements.*;
16 481 mdecorde
import visuAnalec.texte.*;
17 481 mdecorde
import visuAnalec.texte.PanneauTexte.*;
18 481 mdecorde
import visuAnalec.util.GMessages.*;
19 481 mdecorde
import visuAnalec.vue.*;
20 481 mdecorde
import visuAnalec.vue.Vue.*;
21 481 mdecorde
22 481 mdecorde
/**
23 481 mdecorde
 *
24 481 mdecorde
 * @author Bernard Victorri
25 481 mdecorde
 */
26 481 mdecorde
public class PanneauEditeur extends JPanel implements VueListener {
27 481 mdecorde
  private enum Commandes {
28 481 mdecorde
    GESTION_UNITES,
29 481 mdecorde
    GESTION_RELATIONS,
30 481 mdecorde
    GESTION_SCHEMAS,
31 481 mdecorde
    MODIF_TEXTE;
32 481 mdecorde
    private static Commandes getCommande(Class<? extends Element> classe) {
33 481 mdecorde
      if (classe==Unite.class) return GESTION_UNITES;
34 481 mdecorde
      if (classe==Relation.class) return GESTION_RELATIONS;
35 481 mdecorde
      if (classe==Schema.class) return GESTION_SCHEMAS;
36 481 mdecorde
      throw new UnsupportedOperationException("sous-classe non traitée");
37 481 mdecorde
    }
38 481 mdecorde
  }
39 481 mdecorde
  private Vue vue;
40 481 mdecorde
  private PanneauAffTexte panneauTexte;
41 481 mdecorde
  private JPanel panneauOccurrences;
42 481 mdecorde
  private PanneauChamps panneauChamps;
43 481 mdecorde
  private Commandes commandes = null;
44 481 mdecorde
  private HashMap<Commandes, PanneauCommandes> panneauxCommandes =
45 481 mdecorde
          new HashMap<Commandes, PanneauCommandes>();
46 481 mdecorde
  private HashMap<Commandes, String> titresPanneauxCommandes =
47 481 mdecorde
          new HashMap<Commandes, String>();
48 481 mdecorde
  private JDialog fenetreModifTexte;
49 481 mdecorde
  private PanneauModifTexte panneauModifTexte;
50 481 mdecorde
  private PanneauCommandesModifTexte panneauCommandesModifTexte;
51 481 mdecorde
  private String recherche = "";
52 481 mdecorde
  private Element elementCourant;
53 481 mdecorde
54 481 mdecorde
  public static class ElementMarque {
55 481 mdecorde
    public Element elt;
56 481 mdecorde
    public String id;
57 481 mdecorde
    public TypeMarquage marque;
58 481 mdecorde
    public ElementMarque(Element elt, TypeMarquage marque, String id) {
59 481 mdecorde
      this.elt = elt;
60 481 mdecorde
      this.id = id;
61 481 mdecorde
      this.marque = marque;
62 481 mdecorde
    }
63 481 mdecorde
  }
64 481 mdecorde
65 481 mdecorde
  public static abstract class PanneauCommandes extends Box {
66 481 mdecorde
    protected Vue vue;
67 481 mdecorde
    protected PanneauAffTexte panneauTexte;
68 481 mdecorde
    PanneauCommandes(Vue vue, PanneauAffTexte panneauTexte) {
69 481 mdecorde
      super(BoxLayout.Y_AXIS);
70 481 mdecorde
      this.vue = vue;
71 481 mdecorde
      this.panneauTexte = panneauTexte;
72 481 mdecorde
    }
73 481 mdecorde
    public Vue getVue() {
74 481 mdecorde
      return vue;
75 481 mdecorde
    }
76 481 mdecorde
    abstract public void reafficher();        // quand la vue n'a pas changé
77 481 mdecorde
    abstract public void reinitialiser();     // quand la vue a changé
78 481 mdecorde
    abstract public void elementSuivant(int sens);
79 481 mdecorde
    abstract public Element elementSelectionne();
80 481 mdecorde
    abstract public void editerElement(Element elt);
81 481 mdecorde
    abstract public void traiterElementEvent(ElementEvent evt);
82 481 mdecorde
    abstract public void traiterSourisEvent(PanneauAffTexte.SourisEvent evt);   // appelée par le panneau AffTexte
83 481 mdecorde
    abstract public ArrayList<ElementMarque> trouverElementsVises(Unite uniteVisee,
84 481 mdecorde
            TypeMarquage marqueUniteVisee, boolean avecId);  // appelée par le panneau AffTexte
85 481 mdecorde
  }
86 481 mdecorde
  public PanneauEditeur(Vue vue) {
87 481 mdecorde
    super(new BorderLayout());
88 481 mdecorde
    this.vue = vue;
89 481 mdecorde
    vue.addEventListener(this);
90 481 mdecorde
    setBorder(new TitledBorder(""));
91 481 mdecorde
    panneauOccurrences = new JPanel(new BorderLayout());
92 481 mdecorde
    panneauTexte = new PanneauAffTexte(vue.getCorpus());
93 481 mdecorde
    panneauOccurrences.add(new JScrollPane(panneauTexte), BorderLayout.CENTER);
94 481 mdecorde
    panneauChamps = new PanneauChamps(this, vue);
95 481 mdecorde
    add(new JSplitPane(JSplitPane.VERTICAL_SPLIT, panneauOccurrences, panneauChamps), BorderLayout.CENTER);
96 481 mdecorde
    // Les différents panneaux de commandes
97 481 mdecorde
    panneauxCommandes.put(Commandes.GESTION_UNITES,
98 481 mdecorde
            new PanneauCommandesUnites(vue, panneauTexte, panneauChamps));
99 481 mdecorde
    titresPanneauxCommandes.put(Commandes.GESTION_UNITES, "Gestion des unités");
100 481 mdecorde
    panneauxCommandes.put(Commandes.GESTION_RELATIONS,
101 481 mdecorde
            new PanneauCommandesRelations(vue, panneauTexte, panneauChamps));
102 481 mdecorde
    titresPanneauxCommandes.put(Commandes.GESTION_RELATIONS, "Gestion des relations");
103 481 mdecorde
    panneauxCommandes.put(Commandes.GESTION_SCHEMAS,
104 481 mdecorde
            new PanneauCommandesSchemas(vue, panneauTexte, panneauChamps));
105 481 mdecorde
    titresPanneauxCommandes.put(Commandes.GESTION_SCHEMAS, "Gestion des schémas");
106 481 mdecorde
    new GActionClavier(this, "suivant", "F1", "control DOWN") {
107 481 mdecorde
      public void executer() {
108 481 mdecorde
        elementSuivant(1);
109 481 mdecorde
      }
110 481 mdecorde
    };
111 481 mdecorde
    new GActionClavier(this, "précédent", "F2", "control UP") {
112 481 mdecorde
      public void executer() {
113 481 mdecorde
        elementSuivant(-1);
114 481 mdecorde
      }
115 481 mdecorde
    };
116 481 mdecorde
    new GActionClavier(this, "copier", "F3", "control M") {
117 481 mdecorde
      public void executer() {
118 481 mdecorde
        copierElement();
119 481 mdecorde
      }
120 481 mdecorde
    };
121 481 mdecorde
    new GActionClavier(this, "coller", "F4", "control R") {
122 481 mdecorde
      public void executer() {
123 481 mdecorde
        collerElement();
124 481 mdecorde
      }
125 481 mdecorde
    };
126 481 mdecorde
    // La fenêtre modale pour éditer le texte
127 481 mdecorde
    fenetreModifTexte = new JDialog((VisuMain) getTopLevelAncestor(), true);
128 481 mdecorde
    fenetreModifTexte.setUndecorated(true);
129 481 mdecorde
    fenetreModifTexte.getContentPane().setLayout(new BorderLayout());
130 481 mdecorde
    panneauModifTexte = new PanneauModifTexte(vue.getCorpus());
131 481 mdecorde
    fenetreModifTexte.getContentPane().add(new JScrollPane(panneauModifTexte), BorderLayout.CENTER);
132 481 mdecorde
    panneauCommandesModifTexte = new visuAnalec.texte.PanneauCommandesModifTexte(this, vue, panneauModifTexte);
133 481 mdecorde
    panneauModifTexte.setCommandesModifTexte(panneauCommandesModifTexte);
134 481 mdecorde
    fenetreModifTexte.getContentPane().add(panneauCommandesModifTexte, BorderLayout.SOUTH);
135 481 mdecorde
    fenetreModifTexte.setVisible(false);
136 481 mdecorde
    // Panneau initial : gestion des unités
137 481 mdecorde
    changerPanneauCommandes(Commandes.GESTION_UNITES);
138 481 mdecorde
    reinitCommandes();
139 481 mdecorde
140 481 mdecorde
  }
141 481 mdecorde
  void agencerPanneaux() {
142 481 mdecorde
    JSplitPane split = (JSplitPane) panneauOccurrences.getParent();
143 481 mdecorde
    split.setDividerLocation(2./3);
144 481 mdecorde
    revalidate();
145 481 mdecorde
    repaint();
146 481 mdecorde
  }
147 481 mdecorde
  private void changerPanneauCommandes(Commandes newCommandes) {
148 481 mdecorde
    if (commandes!=null)
149 481 mdecorde
      panneauOccurrences.remove(panneauxCommandes.get(commandes));
150 481 mdecorde
    commandes = newCommandes;
151 481 mdecorde
    panneauOccurrences.add(panneauxCommandes.get(commandes), BorderLayout.NORTH);
152 481 mdecorde
    ((TitledBorder) getBorder()).setTitle(titresPanneauxCommandes.get(commandes));
153 481 mdecorde
    panneauTexte.setCommandes(panneauxCommandes.get(commandes));
154 481 mdecorde
    revalidate();
155 481 mdecorde
    repaint();
156 481 mdecorde
  }
157 481 mdecorde
  private void reinitCommandes() {
158 481 mdecorde
    panneauxCommandes.get(commandes).reinitialiser();
159 481 mdecorde
  }
160 481 mdecorde
  private void elementSuivant(int sens) {
161 481 mdecorde
    panneauxCommandes.get(commandes).elementSuivant(sens);
162 481 mdecorde
  }
163 481 mdecorde
  private void copierElement() {
164 481 mdecorde
    Element elt = panneauxCommandes.get(commandes).elementSelectionne();
165 481 mdecorde
    if (elt!=null) elementCourant = elt;
166 481 mdecorde
  }
167 481 mdecorde
  private void collerElement() {
168 481 mdecorde
    if (elementCourant==null) return;
169 481 mdecorde
    Element elt = panneauxCommandes.get(commandes).elementSelectionne();
170 481 mdecorde
    if (elt==null) return;
171 481 mdecorde
    vue.copierValeurs(elementCourant, elt);
172 481 mdecorde
  }
173 481 mdecorde
  private void reinitCommandes(Element elt) {
174 481 mdecorde
    panneauxCommandes.get(commandes).reinitialiser();
175 481 mdecorde
    panneauxCommandes.get(commandes).editerElement(elt);
176 481 mdecorde
  }
177 481 mdecorde
  private void reaffCommandes() {
178 481 mdecorde
    panneauxCommandes.get(commandes).reafficher();
179 481 mdecorde
  }
180 481 mdecorde
  private void initNewCorpus() {
181 481 mdecorde
    panneauTexte.setTexteVisu();
182 481 mdecorde
    panneauTexte.initAscenseur();
183 481 mdecorde
    colorierTexte();
184 481 mdecorde
    changerPanneauCommandes(Commandes.GESTION_UNITES);
185 481 mdecorde
    reinitCommandes();
186 481 mdecorde
  }
187 481 mdecorde
  private void colorierTexte() {
188 481 mdecorde
    panneauTexte.setAttributsStandard(vue.getStyleTexte());
189 481 mdecorde
    panneauTexte.colorierUnites(vue.getUnitesAColorier());
190 481 mdecorde
  }
191 481 mdecorde
  void initRechercherTexte() {
192 481 mdecorde
    recherche = (String) JOptionPane.showInputDialog(this, "Recherche dans le texte",
193 481 mdecorde
            "Rechercher", JOptionPane.PLAIN_MESSAGE, null, null, recherche);
194 481 mdecorde
    if (recherche==null) recherche = "";
195 481 mdecorde
    if (recherche.isEmpty()) return;
196 481 mdecorde
    panneauTexte.rechercherTexte(recherche);
197 481 mdecorde
  }
198 481 mdecorde
  void rechercherSuivantTexte() {
199 481 mdecorde
    if (recherche.isEmpty()) return;
200 481 mdecorde
    panneauTexte.rechercherTexte(recherche);
201 481 mdecorde
202 481 mdecorde
  }
203 481 mdecorde
  void initModifierTexte() {
204 481 mdecorde
    ((TitledBorder) getBorder()).setTitle("Modification du texte");
205 481 mdecorde
    repaint();
206 481 mdecorde
    fenetreModifTexte.setSize(panneauOccurrences.getSize());
207 481 mdecorde
    fenetreModifTexte.setLocationRelativeTo(panneauOccurrences);
208 481 mdecorde
    panneauChamps.effacer();
209 481 mdecorde
    panneauModifTexte.init();
210 481 mdecorde
    fenetreModifTexte.setModal(false);
211 481 mdecorde
    fenetreModifTexte.setVisible(true);
212 481 mdecorde
    panneauModifTexte.ajusterAscenseur(panneauTexte);
213 481 mdecorde
    fenetreModifTexte.setVisible(false);
214 481 mdecorde
    fenetreModifTexte.setModal(true);
215 481 mdecorde
    fenetreModifTexte.setVisible(true);
216 481 mdecorde
  }
217 481 mdecorde
  public void finModifTexte() {
218 481 mdecorde
    fenetreModifTexte.setVisible(false);
219 481 mdecorde
    panneauTexte.ajusterAscenseur(panneauModifTexte);
220 481 mdecorde
    if (commandes==null) {
221 481 mdecorde
      changerPanneauCommandes(Commandes.GESTION_UNITES);
222 481 mdecorde
      reinitCommandes();
223 481 mdecorde
    } else {
224 481 mdecorde
      ((TitledBorder) getBorder()).setTitle(titresPanneauxCommandes.get(commandes));
225 481 mdecorde
      reaffCommandes();
226 481 mdecorde
    }
227 481 mdecorde
    repaint();
228 481 mdecorde
  }
229 481 mdecorde
  public void saisirStyleTexte(Vue vue) {
230 481 mdecorde
    VisuStyleTexte.newVisuStyleTexte(this, vue.getStyleTexte());
231 481 mdecorde
  }
232 481 mdecorde
  public void changerStyleTexte(SimpleAttributeSet att) {
233 481 mdecorde
    vue.setStyleTexte(att);
234 481 mdecorde
    panneauTexte.setAttributsStandard(att);
235 481 mdecorde
    panneauModifTexte.setAttributsStandard(att);
236 481 mdecorde
    reaffCommandes();
237 481 mdecorde
  }
238 481 mdecorde
  public Document getTexteFormate() {
239 481 mdecorde
    return panneauTexte.getDocument();
240 481 mdecorde
  }
241 481 mdecorde
  public void editerElement(Element elt) {
242 481 mdecorde
    // typiquement, appelée de l'extérieur par d'autres fenêtres
243 481 mdecorde
    changerPanneauCommandes(Commandes.getCommande(elt.getClass()));
244 481 mdecorde
    reinitCommandes(elt);
245 481 mdecorde
    ((VisuMain) getTopLevelAncestor()).premierPlan();
246 481 mdecorde
  }
247 481 mdecorde
  public void editerUniteChaine(Unite unit, Schema chaine) {
248 481 mdecorde
    // appelée de l'extérieur notamment par visuChaines)
249 481 mdecorde
    changerPanneauCommandes(Commandes.GESTION_SCHEMAS);
250 481 mdecorde
    reinitCommandes();
251 481 mdecorde
    ((PanneauCommandesSchemas) panneauxCommandes.get(commandes)).editerSchemaElement(chaine, unit);
252 481 mdecorde
    ((VisuMain) getTopLevelAncestor()).premierPlan();
253 481 mdecorde
  }
254 481 mdecorde
  public void editerUniteTypeChaine(Unite unit, String typechaine) {
255 481 mdecorde
    // appelée de l'extérieur notamment par visuChaines)
256 481 mdecorde
    changerPanneauCommandes(Commandes.GESTION_SCHEMAS);
257 481 mdecorde
    reinitCommandes();
258 481 mdecorde
    ((PanneauCommandesSchemas) panneauxCommandes.get(commandes)).editerElementTypeSchema(unit, typechaine);
259 481 mdecorde
    ((VisuMain) getTopLevelAncestor()).premierPlan();
260 481 mdecorde
  }
261 481 mdecorde
  void initGestionUnites() {
262 481 mdecorde
    if (vue.getTypesUnitesAVoir().length==0) {
263 481 mdecorde
      JOptionPane.showMessageDialog(getTopLevelAncestor(), "Aucun type d'unités n'est défini dans la vue actuelle",
264 481 mdecorde
              "Saisie d'unités impossible", JOptionPane.ERROR_MESSAGE);
265 481 mdecorde
      return;
266 481 mdecorde
    }
267 481 mdecorde
    changerPanneauCommandes(Commandes.GESTION_UNITES);
268 481 mdecorde
    reinitCommandes();
269 481 mdecorde
  }
270 481 mdecorde
  void initGestionRelations() {
271 481 mdecorde
    if (vue.getTypesRelationsAVoir().length==0) {
272 481 mdecorde
      JOptionPane.showMessageDialog(getTopLevelAncestor(), "Aucun type de relation n'est défini dans la vue actuelle",
273 481 mdecorde
              "Saisie de relations impossible", JOptionPane.ERROR_MESSAGE);
274 481 mdecorde
      return;
275 481 mdecorde
    }
276 481 mdecorde
    changerPanneauCommandes(Commandes.GESTION_RELATIONS);
277 481 mdecorde
    reinitCommandes();
278 481 mdecorde
  }
279 481 mdecorde
  void initGestionSchemas() {
280 481 mdecorde
    if (vue.getTypesSchemasAVoir().length==0) {
281 481 mdecorde
      JOptionPane.showMessageDialog(getTopLevelAncestor(), "Aucun type de schéma n'est défini dans la vue actuelle",
282 481 mdecorde
              "Saisie de schéma impossible", JOptionPane.ERROR_MESSAGE);
283 481 mdecorde
      return;
284 481 mdecorde
    }
285 481 mdecorde
    changerPanneauCommandes(Commandes.GESTION_SCHEMAS);
286 481 mdecorde
    reinitCommandes();
287 481 mdecorde
  }
288 481 mdecorde
  public void traiterVueEvent(VueEvent evt) {
289 481 mdecorde
    switch (evt.getModif()) {
290 481 mdecorde
      case EXTRACTION:
291 481 mdecorde
      case NEW_VUE:
292 481 mdecorde
      case VUE_DEFAUT:
293 481 mdecorde
        colorierTexte();
294 481 mdecorde
        reinitCommandes();
295 481 mdecorde
        return;
296 481 mdecorde
      default:
297 481 mdecorde
        throw new UnsupportedOperationException("Cas "+evt.getModif()+" oublié dans un switch");
298 481 mdecorde
    }
299 481 mdecorde
  }
300 481 mdecorde
  public void traiterStructureEvent(StructureEvent evt) {
301 481 mdecorde
    switch (evt.getModif()) {
302 481 mdecorde
      case SUPPR_TYPE:
303 481 mdecorde
      case FUSION_TYPE:
304 481 mdecorde
      case RENOM_TYPE:
305 481 mdecorde
      case AJOUT_TYPE:
306 481 mdecorde
      case AJOUT_TYPE_ET_ELEMENTS:
307 481 mdecorde
        colorierTexte();
308 481 mdecorde
        reinitCommandes();
309 481 mdecorde
        return;
310 481 mdecorde
      case VALEUR_PAR_DEFAUT:
311 481 mdecorde
      case AJOUT_FORME_UNITE:
312 481 mdecorde
      case FUSION_PROP:
313 481 mdecorde
      case RENOM_PROP:
314 481 mdecorde
      case SUPPR_PROP:
315 481 mdecorde
      case AJOUT_PROP:
316 481 mdecorde
      case FUSION_VALEUR:
317 481 mdecorde
      case RENOM_VALEUR:
318 481 mdecorde
      case SUPPR_VALEUR:
319 481 mdecorde
      case AJOUT_VALEUR:
320 481 mdecorde
        colorierTexte();
321 481 mdecorde
        panneauChamps.reafficher();
322 481 mdecorde
        return;
323 481 mdecorde
      default:
324 481 mdecorde
        throw new UnsupportedOperationException("Cas "+evt.getModif()+" oublié dans un switch");
325 481 mdecorde
    }
326 481 mdecorde
  }
327 481 mdecorde
  public void traiterEvent(Message evt) {
328 481 mdecorde
    switch (evt.getType()) {
329 481 mdecorde
      case CLEAR_CORPUS:
330 481 mdecorde
        initNewCorpus();
331 481 mdecorde
        return;
332 481 mdecorde
      case NEW_CORPUS:
333 481 mdecorde
        initNewCorpus();
334 481 mdecorde
        return;
335 481 mdecorde
      case MODIF_TEXTE:
336 481 mdecorde
        panneauTexte.setTexteVisu();
337 481 mdecorde
        return;
338 481 mdecorde
      case MODIF_VUE:
339 481 mdecorde
        traiterVueEvent((VueEvent) evt);
340 481 mdecorde
        return;
341 481 mdecorde
      case MODIF_STRUCTURE:
342 481 mdecorde
        traiterStructureEvent((StructureEvent) evt);
343 481 mdecorde
        return;
344 481 mdecorde
      case MODIF_ELEMENT:
345 481 mdecorde
        colorierTexte();
346 481 mdecorde
        panneauxCommandes.get(commandes).traiterElementEvent((ElementEvent) evt);
347 481 mdecorde
        return;
348 481 mdecorde
      default:
349 481 mdecorde
        throw new UnsupportedOperationException("Cas "+evt.getType()+" oublié dans un switch");
350 481 mdecorde
    }
351 481 mdecorde
352 481 mdecorde
  }
353 481 mdecorde
}