Statistiques
| Révision :

root / tmp / org.txm.analec.rcp / src / visuAnalec / PanneauCommandesRelations.java @ 3095

Historique | Voir | Annoter | Télécharger (29,8 ko)

1
/*
2
 * To change this template, choose Tools | Templates
3
 * and open the template in the editor.
4
 */
5
package visuAnalec;
6

    
7
import java.awt.*;
8
import java.awt.event.*;
9
import java.util.ArrayList;
10
import javax.swing.*;
11
import visuAnalec.Message.*;
12
import visuAnalec.PanneauEditeur.*;
13
import visuAnalec.elements.*;
14
import visuAnalec.texte.*;
15
import visuAnalec.texte.PanneauAffTexte.*;
16
import visuAnalec.texte.PanneauTexte.*;
17
import visuAnalec.util.*;
18
import visuAnalec.util.GMessages.*;
19
import visuAnalec.util.GVisu.*;
20
import visuAnalec.vue.*;
21

    
22
/**
23
 *
24
 * @author Bernard
25
 */
26
public class PanneauCommandesRelations extends PanneauCommandes implements ActionListener {
27
  private PanneauChamps panneauChamps;
28
  private TypeComboBox saisieTypeRelations;
29
  private ElementComboBox saisieRelation;
30
  private TypeComboBox saisieTypeElt1;
31
  private ElementComboBox saisieElt1;
32
  private TypeComboBox saisieTypeElt2;
33
  private ElementComboBox saisieElt2;
34
  private JButton creeRelation;
35
  private JButton supprimeRelation;
36
  private JButton creeUniteElt1;
37
  private JButton creeUniteElt2;
38
  private boolean uniteCreeElt1 = true; // pour la création d'unités en cours de route
39
  private int[] bornesSelectTexte;
40
  /*
41
  
42
   * CREATION PAR LE PANNEAU EDITEUR
43
   */
44
  PanneauCommandesRelations(Vue vue, PanneauAffTexte pTexte, PanneauChamps pChamps) {
45
    super(vue, pTexte);
46
    JToolBar barre1 = new JToolBar();
47
    barre1.setPreferredSize(new Dimension(0, 22));
48
    barre1.setAlignmentX(0.0f);
49
    //    barre1.setFloatable(false);
50
    add(barre1);
51
    JToolBar barre2 = new JToolBar();
52
//    barre2.setBackground(PanneauTexte.getCouleurFond2());
53
    barre2.setPreferredSize(new Dimension(0, 22));
54
    barre2.setAlignmentX(0.0f);
55
//     barre2.setFloatable(false);
56
    add(barre2);
57
    JToolBar barre3 = new JToolBar();
58
    barre3.setPreferredSize(new Dimension(0, 22));
59
    barre3.setAlignmentX(0.0f);
60
//    barre3.setBackground(PanneauTexte.getCouleurFond2());
61
//     barre3.setFloatable(false);
62
    add(barre3);
63

    
64
    panneauChamps = pChamps;
65
    saisieTypeRelations = new TypeComboBox(Relation.class);
66
    saisieTypeRelations.addActionListener(this);
67
    saisieRelation = new ElementComboBox();
68
    saisieRelation.addActionListener(this);
69
    saisieTypeElt1 = new TypeComboBox(Element.class);
70
    saisieTypeElt1.addActionListener(this);
71
    saisieElt1 = new ElementComboBox();
72
    saisieElt1.addActionListener(this);
73
    saisieTypeElt2 = new TypeComboBox(Element.class);
74
    saisieTypeElt2.addActionListener(this);
75
    saisieElt2 = new ElementComboBox();
76
    saisieElt2.addActionListener(this);
77
    creeRelation = new JButton(new GAction("Créer") {
78
      public void executer() {
79
        creerRelation();
80
      }
81
    });
82
    supprimeRelation = new JButton(new GAction("Supprimer") {
83
      public void executer() {
84
        supprimerRelation();
85
      }
86
    });
87
    creeUniteElt1 = new JButton(new GAction("Créer") {
88
      public void executer() {
89
        creerUniteElt1();
90
      }
91
    });
92
    creeUniteElt2 = new JButton(new GAction("Créer") {
93
      public void executer() {
94
        creerUniteElt2();
95
      }
96
    });
97
    barre1.addSeparator();
98
    barre1.add(new TitreBarre("  Relation :  ", PanneauTexte.getCouleurFond1()));
99
    barre1.addSeparator();
100
    barre1.add(saisieTypeRelations);
101
    barre1.add(saisieRelation);
102
    barre1.addSeparator();
103
    barre1.add(creeRelation);
104
    barre1.addSeparator();
105
    barre1.add(supprimeRelation);
106
    barre2.addSeparator();
107
    barre2.add(new TitreBarre("Elément 1 : ", PanneauTexte.getCouleurFond2()));
108
    barre2.addSeparator();
109
    barre2.add(saisieTypeElt1);
110
    barre2.add(saisieElt1);
111
    barre2.addSeparator();
112
    barre2.add(creeUniteElt1);
113
    barre3.addSeparator();
114
    barre3.add(new TitreBarre("Elément 2 : ", PanneauTexte.getCouleurFond3()));
115
    barre3.addSeparator();
116
    barre3.add(saisieTypeElt2);
117
    barre3.add(saisieElt2);
118
    barre3.addSeparator();
119
    barre3.add(creeUniteElt2);
120
  }
121

    
122
  /*
123
   * COMMANDES UTILISEES PAR LE PANNEAU EDITEUR
124
   */
125
  public void reinitialiser() {
126
    // typiquement, appelé par le panneau éditeur à la suite d'une modif de vue ou de structure
127
    saisieTypeRelations.removeActionListener(this);
128
    saisieTypeRelations.setModele(vue.getTypesRelationsAVoir());
129
    saisieTypeRelations.effSelection();
130
    saisieTypeRelations.addActionListener(this);
131
    saisieTypeElt1.removeActionListener(this);
132
    saisieTypeElt1.setModele(vue.getTypes(Unite.class), vue.getTypes(Relation.class), vue.getTypes(Schema.class));
133
    saisieTypeElt1.effSelection();
134
    saisieTypeElt1.addActionListener(this);
135
    saisieTypeElt2.removeActionListener(this);
136
    saisieTypeElt2.setModele(vue.getTypes(Unite.class), vue.getTypes(Relation.class), vue.getTypes(Schema.class));
137
    saisieTypeElt2.effSelection();
138
    saisieTypeElt2.addActionListener(this);
139
    initSaisieRelation();
140
    initSaisieElt1();
141
    initSaisieElt2();
142
    etatSelectRien();
143
    revalidate();
144
    repaint();
145
  }
146
  public void reafficher() {
147
    // potentiellement appelé par le panneau éditeur ?
148
    // appelé aussi par  traiterElementEvent
149
    if (saisieRelation.pasdeSelection()) {
150
      initSaisieRelation();
151
      if (saisieElt1.pasdeSelection()) {
152
        initSaisieElt1();
153
        if (saisieElt2.pasdeSelection()) {
154
          initSaisieElt2();
155
          etatSelectRien();
156
        } else {
157
          Element elt2Courant = saisieElt2.getSelection();
158
          initSaisieElt2(elt2Courant);
159
          etatSelectElt2(elt2Courant);
160
        }
161
      } else {
162
        Element elt1Courant = saisieElt1.getSelection();
163
        initSaisieElt1(elt1Courant);
164
        if (saisieElt2.pasdeSelection()) {
165
          initSaisieElt2();
166
          etatSelectElt1(elt1Courant);
167

    
168
        } else {
169
          Element elt2Courant = saisieElt2.getSelection();
170
          initSaisieElt2(elt2Courant);
171
          etatSelectElts(elt1Courant, elt2Courant);
172
        }
173
      }
174
    } else {
175
      Relation relCourant = (Relation) saisieRelation.getSelection();
176
      initSaisieRelation(relCourant);
177
      initSaisieElt1(relCourant.getElt1());
178
      initSaisieElt2(relCourant.getElt2());
179
      etatSelectRel(relCourant);
180
    }
181
  }
182
  public void elementSuivant(int sens) {
183
    if (sens>0) saisieRelation.gotoSuivant();
184
    else saisieRelation.gotoPrecedent();
185
  }
186
 public Element elementSelectionne() {
187
    if (saisieRelation.pasdeSelection()) return null;
188
    return saisieRelation.getSelection();
189
  }
190
  public void editerElement(Element elt) {
191
    // appelé par le panneauEditeur : elt est forcément une relation
192
    if (elt.getClass()!=Relation.class)
193
      throw new UnsupportedOperationException("Erreur : classe incorrecte");
194
    editerRelation((Relation) elt);
195
  }
196
  public void traiterElementEvent(ElementEvent evt) {
197
    switch (evt.getModif()) {
198
      case AJOUT_RELATION:
199
        Relation rel = (Relation) evt.getElement();
200
        editerRelation(rel);
201
        return;
202
      case SUP_RELATION:
203
        if (evt.getElement()==saisieRelation.getSelection()) {
204
          initSaisieRelation();
205
          initSaisieElt1();
206
          initSaisieElt2();
207
          etatSelectRien();
208
        } else {
209
          reafficher();
210
        }
211
        return;
212
      case AJOUT_UNITE:
213
        Unite unit = (Unite) evt.getElement();
214
        boolean chgEtat = false;
215
        if (!saisieTypeElt1.pasdeSelection()&&saisieTypeElt1.getClasseSelection()==Unite.class
216
                &&saisieTypeElt1.getTypeSelection().equals(unit.getType())) {
217
          initSaisieElt1(uniteCreeElt1 ? unit : null);
218
          chgEtat = true;
219
        }
220
        if (!saisieTypeElt2.pasdeSelection()&&saisieTypeElt2.getClasseSelection()==Unite.class
221
                &&saisieTypeElt2.getTypeSelection().equals(unit.getType())) {
222
          initSaisieElt2(uniteCreeElt1 ? null : unit);
223
          chgEtat = true;
224
        }
225
        if (chgEtat) {
226
          if (uniteCreeElt1) etatSelectElt1(unit);
227
          else etatSelectElt2(unit);
228
          uniteCreeElt1 = true;
229
        }
230
        return;
231
      case SUP_UNITE:
232
      case BORNES_UNITE:
233
      case AJOUT_SCHEMA:
234
      case MODIF_SCHEMA:
235
      case SUP_SCHEMA:
236
      case MODIF_VALEUR:
237
        reafficher();
238
        return;
239
      default:
240
        throw new UnsupportedOperationException("Cas "+evt.getModif()+" oublié dans un switch");
241
    }
242
  }
243
  public void editerRelation(Relation rel) {
244
    // appelé  par traiterElementEvent, 
245
    // et aussi directement par le panneau éditeur quand il est sollicité par d'autres fenêtres
246
    if (!rel.getType().equals(saisieTypeRelations.getTypeSelection())) {
247
      saisieTypeRelations.removeActionListener(this);
248
      saisieTypeRelations.setSelection(rel.getType());
249
      saisieTypeRelations.addActionListener(this);
250
    }
251
    initSaisieRelation(rel);
252
    saisieRelation.setSelection(rel);
253
  }
254
  public ArrayList<ElementMarque> trouverElementsVises(Unite uniteVisee, TypeMarquage marqueUniteVisee,
255
          boolean avecId) {
256
    ArrayList<ElementMarque> eltsMarques = new ArrayList<ElementMarque>();
257
    ArrayList<Element> eltsVises;
258
    Element eltVise;
259
    switch (marqueUniteVisee) {
260
      case FOND1:
261
        eltsVises = Element.trouverElementsParUniteSousjacente(saisieRelation.getElements(), uniteVisee);
262
        for (Element elt : eltsVises)
263
          eltsMarques.add(new ElementMarque(
264
                  elt, marqueUniteVisee, avecId ? saisieRelation.getIdElement(elt) : null));
265
        return eltsMarques;
266
      case FOND2:
267
        eltsVises = Element.trouverElementsParUniteSousjacente(saisieElt1.getElements(), uniteVisee);
268
        for (Element elt : eltsVises)
269
          eltsMarques.add(new ElementMarque(
270
                  elt, marqueUniteVisee, avecId ? saisieElt1.getIdElement(elt) : null));
271
        return eltsMarques;
272
      case FOND3:
273
        eltsVises = Element.trouverElementsParUniteSousjacente(saisieElt2.getElements(), uniteVisee);
274
        for (Element elt : eltsVises)
275
          eltsMarques.add(new ElementMarque(
276
                  elt, marqueUniteVisee, avecId ? saisieElt2.getIdElement(elt) : null));
277
        return eltsMarques;
278
      case SELECT2:
279
      case SELECT1_2:
280
        eltVise = saisieElt1.getSelection();
281
        eltsMarques.add(new ElementMarque(
282
                eltVise, marqueUniteVisee, avecId ? saisieElt1.getIdElement(eltVise) : null));
283
        return eltsMarques;
284
      case SELECT3:
285
      case SELECT1_3:
286
        eltVise = saisieElt2.getSelection();
287
        eltsMarques.add(new ElementMarque(
288
                eltVise, marqueUniteVisee, avecId ? saisieElt2.getIdElement(eltVise) : null));
289
        return eltsMarques;
290
      default:
291
        throw new UnsupportedOperationException("Marquage non prévu : "+marqueUniteVisee);
292

    
293
    }
294
  }
295

    
296
  /*
297
   * ACTIONS DE L'UTILISATEUR : CHANGEMENTS D'ETAT
298
   */
299
  public void actionPerformed(ActionEvent evt) {
300
    try {
301
      if (evt.getSource()==saisieTypeRelations) {
302
        initSaisieRelation();
303
        if (saisieElt1.pasdeSelection()) {
304
          if (saisieElt2.pasdeSelection()) etatSelectRien();
305
          else etatSelectElt2(saisieElt2.getSelection());
306
        } else {
307
          if (saisieElt2.pasdeSelection())
308
            etatSelectElt1(saisieElt1.getSelection());
309
          else
310
            checkEtatSelectElts(saisieElt1.getSelection(), saisieElt2.getSelection());
311
        }
312
        return;
313
      }
314
      if (evt.getSource()==saisieTypeElt1) {
315
        forceEffSelectRel();
316
        initSaisieElt1();
317
        if (saisieElt2.pasdeSelection()) etatSelectRien();
318
        else etatSelectElt2(saisieElt2.getSelection());
319
        return;
320
      }
321
      if (evt.getSource()==saisieTypeElt2) {
322
        forceEffSelectRel();
323
        initSaisieElt2();
324
        if (saisieElt1.pasdeSelection()) etatSelectRien();
325
        else etatSelectElt1(saisieElt1.getSelection());
326
        return;
327
      }
328
      if (evt.getSource()==saisieRelation) {
329
        if (saisieRelation.pasdeSelection()) {
330
          if (saisieElt1.pasdeSelection()) {
331
            if (saisieElt2.pasdeSelection()) etatSelectRien();
332
            else etatSelectElt2(saisieElt2.getSelection());
333
          } else {
334
            if (saisieElt2.pasdeSelection())
335
              etatSelectElt1(saisieElt1.getSelection());
336
            else
337
              etatSelectElts(saisieElt1.getSelection(), saisieElt2.getSelection());
338
          }
339
        } else {
340
          forceEtatSelectRel((Relation) saisieRelation.getSelection());
341
        }
342
        return;
343
      }
344
      if (evt.getSource()==saisieElt1) {
345
        if (!saisieRelation.pasdeSelection()) {
346
          saisieRelation.removeActionListener(this);
347
          saisieRelation.effSelection();
348
          saisieRelation.addActionListener(this);
349
          saisieElt2.removeActionListener(this);
350
          saisieElt2.effSelection();
351
          saisieElt2.addActionListener(this);
352
        }
353
        if (saisieElt1.pasdeSelection()) {
354
          if (saisieElt2.pasdeSelection()) etatSelectRien();
355
          else etatSelectElt2(saisieElt2.getSelection());
356
        } else {
357
          if (saisieElt2.pasdeSelection())
358
            etatSelectElt1(saisieElt1.getSelection());
359
          else
360
            checkEtatSelectElts(saisieElt1.getSelection(), saisieElt2.getSelection());
361
        }
362
        return;
363
      }
364
      if (evt.getSource()==saisieElt2) {
365
        if (!saisieRelation.pasdeSelection()) {
366
          saisieRelation.removeActionListener(this);
367
          saisieRelation.effSelection();
368
          saisieRelation.addActionListener(this);
369
          saisieElt1.removeActionListener(this);
370
          saisieElt1.effSelection();
371
          saisieElt1.addActionListener(this);
372
        }
373
        if (saisieElt2.pasdeSelection()) {
374
          if (saisieElt1.pasdeSelection()) etatSelectRien();
375
          else etatSelectElt1(saisieElt1.getSelection());
376
        } else {
377
          if (saisieElt1.pasdeSelection())
378
            etatSelectElt2(saisieElt2.getSelection());
379
          else
380
            checkEtatSelectElts(saisieElt1.getSelection(), saisieElt2.getSelection());
381
        }
382
        return;
383
      }
384
      throw new UnsupportedOperationException("Evénement non prévu : "+evt.paramString());
385
    } catch (Throwable ex) {
386
      GMessages.erreurFatale(ex);
387
    }
388
  }
389
  @Override
390
  public void traiterSourisEvent(SourisEvent evt) {
391
    switch (evt.getTypeEvent()) {
392
      case SELECT_RIEN:
393
        saisieElt1.removeActionListener(this);
394
        saisieElt1.effSelection();
395
        saisieElt1.addActionListener(this);
396
        saisieElt2.removeActionListener(this);
397
        saisieElt2.effSelection();
398
        saisieElt2.addActionListener(this);
399
        saisieRelation.removeActionListener(this);
400
        saisieRelation.effSelection();
401
        saisieRelation.addActionListener(this);
402
        etatSelectRien();
403
        return;
404
      case SELECT_ELEMENT:
405
        switch (evt.getMarquageElementVise()) {
406
          case FOND1:
407
            saisieRelation.setSelection(evt.getElementVise());
408
            return;
409
          case FOND2:
410
            saisieElt1.setSelection(evt.getElementVise());
411
            return;
412
          case FOND3:
413
            saisieElt2.setSelection(evt.getElementVise());
414
            return;
415
          case SELECT2:
416
          case SELECT1_2:
417
            forceEffSelectElt2();
418
            return;
419
          case SELECT3:
420
          case SELECT1_3:
421
            forceEffSelectElt1();
422
            return;
423
        }
424
        return;
425
      case SELECT_TEXTE:
426
        if (!saisieElt1.pasdeSelection()&&!saisieElt2.pasdeSelection()) {
427
          saisieElt1.removeActionListener(this);
428
          saisieElt1.effSelection();
429
          saisieElt1.addActionListener(this);
430
          saisieElt2.removeActionListener(this);
431
          saisieElt2.effSelection();
432
          saisieElt2.addActionListener(this);
433
          saisieRelation.removeActionListener(this);
434
          saisieRelation.effSelection();
435
          saisieRelation.addActionListener(this);
436
        }
437
        bornesSelectTexte = evt.getBornesSelectionTexte();
438
        etatSelectTexte();
439
        return;
440
    }
441
    throw new UnsupportedOperationException("Evénement non prévu : "+evt.getTypeEvent());
442
  }
443
  /*
444
   * ACTIONS DE L'UTILISATEUR : BOUTONS
445
   */
446
  private void creerRelation() {
447
    vue.getCorpus().addRelationSaisie((String) saisieTypeRelations.getTypeSelection(),
448
            saisieElt1.getSelection(), saisieElt2.getSelection());
449
  }
450
  private void supprimerRelation() {
451
    if (!GMessages.confirmationAction("Supprimer la relation sélectionnée ?"))
452
      return;
453
    vue.getCorpus().supRelation((Relation) saisieRelation.getSelection());
454
  }
455
  private void creerUniteElt1() {
456
    if (vue.getCorpus().checkPresenceUnite(saisieTypeElt1.getTypeSelection(), bornesSelectTexte[0], bornesSelectTexte[1])
457
            &&!GMessages.confirmationAction("Dupliquer cette unité  ?")) return;
458
    uniteCreeElt1 = true;
459
    vue.getCorpus().addUniteSaisie(saisieTypeElt1.getTypeSelection(), bornesSelectTexte[0], bornesSelectTexte[1]);
460
  }
461
  private void creerUniteElt2() {
462
    if (vue.getCorpus().checkPresenceUnite(saisieTypeElt2.getTypeSelection(), bornesSelectTexte[0], bornesSelectTexte[1])
463
            &&!GMessages.confirmationAction("Dupliquer cette unité  ?")) return;
464
    uniteCreeElt1 = false;
465
    vue.getCorpus().addUniteSaisie(saisieTypeElt2.getTypeSelection(), bornesSelectTexte[0], bornesSelectTexte[1]);
466
  }
467

    
468
  /* 
469
   * GESTION INTERNE
470
   */
471
  private void etatSelectRien() {   // rien n'est sélectionné
472
    if (saisieTypeRelations.pasdeSelection()) {
473
      if (saisieTypeElt1.pasdeSelection()) {
474
        if (saisieTypeElt2.pasdeSelection()) panneauTexte.pasDeMarquage();
475
        else
476
          panneauTexte.saisir(null,
477
                  Element.getUnitesSousjacentes(saisieElt2.getElements()), TypeMarquage.FOND3);
478
      } else {
479
        if (saisieTypeElt2.pasdeSelection())
480
          panneauTexte.saisir(null,
481
                  Element.getUnitesSousjacentes(saisieElt1.getElements()), TypeMarquage.FOND2);
482
        else
483
          panneauTexte.saisir(null,
484
                  Element.getUnitesSousjacentes(saisieElt1.getElements()), TypeMarquage.FOND2,
485
                  Element.getUnitesSousjacentes(saisieElt2.getElements()), TypeMarquage.FOND3);
486
      }
487
    } else {
488
      if (saisieTypeElt1.pasdeSelection()) {
489
        if (saisieTypeElt2.pasdeSelection())
490
          panneauTexte.saisir(null,
491
                  Element.getUnitesSousjacentes(saisieRelation.getElements()), TypeMarquage.FOND1);
492
        else
493
          panneauTexte.saisir(null,
494
                  Element.getUnitesSousjacentes(filtreElt2((Relation[]) saisieRelation.getElements())), TypeMarquage.FOND1,
495
                  Element.getUnitesSousjacentes(saisieElt2.getElements()), TypeMarquage.FOND3);
496
      } else {
497
        if (saisieTypeElt2.pasdeSelection())
498
          panneauTexte.saisir(null,
499
                  Element.getUnitesSousjacentes(filtreElt1((Relation[]) saisieRelation.getElements())), TypeMarquage.FOND1,
500
                  Element.getUnitesSousjacentes(saisieElt1.getElements()), TypeMarquage.FOND2);
501
        else
502
          panneauTexte.saisir(null,
503
                  Element.getUnitesSousjacentes(filtreElts((Relation[]) saisieRelation.getElements())), TypeMarquage.FOND1,
504
                  Element.getUnitesSousjacentes(saisieElt1.getElements()), TypeMarquage.FOND2,
505
                  Element.getUnitesSousjacentes(saisieElt2.getElements()), TypeMarquage.FOND3);
506
      }
507
    }
508
    panneauChamps.effacer();
509
    creeRelation.setEnabled(false);
510
    supprimeRelation.setEnabled(false);
511
    creeUniteElt1.setEnabled(false);
512
    creeUniteElt2.setEnabled(false);
513
  }
514
  private void etatSelectTexte() {   // du texte est sélectionné
515
    if (saisieElt1.pasdeSelection()) {
516
      if (saisieElt2.pasdeSelection()) panneauTexte.pasDeMarquage();
517
      else
518
        panneauTexte.saisir(null,
519
                saisieElt2.getSelection().getUnitesSousjacentes(), TypeMarquage.SELECT3);
520
    } else {
521
      if (saisieElt2.pasdeSelection())
522
        panneauTexte.saisir(null,
523
                saisieElt1.getSelection().getUnitesSousjacentes(), TypeMarquage.SELECT2);
524
      else // au moins un des 2 elt n'est pas sélectionné
525
        throw new UnsupportedOperationException("Cas non prévu");
526
    }
527
    panneauChamps.effacer();
528
    creeRelation.setEnabled(false);
529
    supprimeRelation.setEnabled(false);
530
    if (!saisieTypeElt1.pasdeSelection()&&saisieTypeElt1.getClasseSelection()==Unite.class
531
            &&saisieElt1.pasdeSelection())
532
      creeUniteElt1.setEnabled(true);
533
    if (!saisieTypeElt2.pasdeSelection()&&saisieTypeElt2.getClasseSelection()==Unite.class
534
            &&saisieElt2.pasdeSelection())
535
      creeUniteElt2.setEnabled(true);
536
  }
537
  private void etatSelectElt1(Element elt1) { // seul Elt1 a été choisi
538
    if (saisieTypeElt2.pasdeSelection()) {
539
      if (saisieTypeRelations.pasdeSelection())
540
        panneauTexte.saisir(elt1.getUnite0(), elt1.getUnitesSousjacentes(), TypeMarquage.SELECT2);
541
      else
542
        panneauTexte.saisir(elt1.getUnite0(), elt1.getUnitesSousjacentes(), TypeMarquage.SELECT2,
543
                Element.getUnitesSousjacentes(filtreElt1((Relation[]) saisieRelation.getElements(), elt1)),
544
                TypeMarquage.FOND1);
545
    } else {
546
      if (saisieTypeRelations.pasdeSelection())
547
        panneauTexte.saisir(elt1.getUnite0(), elt1.getUnitesSousjacentes(), TypeMarquage.SELECT2,
548
                Element.getUnitesSousjacentes(saisieElt2.getElements()), TypeMarquage.FOND3);
549
      else
550
        panneauTexte.saisir(elt1.getUnite0(), elt1.getUnitesSousjacentes(), TypeMarquage.SELECT2,
551
                Element.getUnitesSousjacentes(filtreElt1(filtreElt2((Relation[]) saisieRelation.getElements()), elt1)),
552
                TypeMarquage.FOND1,
553
                Element.getUnitesSousjacentes(saisieElt2.getElements()), TypeMarquage.FOND3);
554
    }
555
    panneauChamps.afficher(elt1);
556
    creeRelation.setEnabled(false);
557
    supprimeRelation.setEnabled(false);
558
    creeUniteElt1.setEnabled(false);
559
    creeUniteElt2.setEnabled(false);
560
  }
561
  private void etatSelectElt2(Element elt2) {  // seul Elt2 a été choisi
562
    if (saisieTypeElt1.pasdeSelection()) {
563
      if (saisieTypeRelations.pasdeSelection())
564
        panneauTexte.saisir(elt2.getUnite0(), elt2.getUnitesSousjacentes(), TypeMarquage.SELECT3);
565
      else
566
        panneauTexte.saisir(elt2.getUnite0(), elt2.getUnitesSousjacentes(), TypeMarquage.SELECT3,
567
                Element.getUnitesSousjacentes(filtreElt2((Relation[]) saisieRelation.getElements(), elt2)),
568
                TypeMarquage.FOND1);
569
    } else {
570
      if (saisieTypeRelations.pasdeSelection())
571
        panneauTexte.saisir(elt2.getUnite0(), elt2.getUnitesSousjacentes(), TypeMarquage.SELECT3,
572
                Element.getUnitesSousjacentes(saisieElt1.getElements()), TypeMarquage.FOND2);
573
      else
574
        panneauTexte.saisir(elt2.getUnite0(), elt2.getUnitesSousjacentes(), TypeMarquage.SELECT3,
575
                Element.getUnitesSousjacentes(filtreElt2(filtreElt1((Relation[]) saisieRelation.getElements()), elt2)),
576
                TypeMarquage.FOND1,
577
                Element.getUnitesSousjacentes(saisieElt1.getElements()), TypeMarquage.FOND2);
578
    }
579
    panneauChamps.afficher(elt2);
580
    creeRelation.setEnabled(false);
581
    supprimeRelation.setEnabled(false);
582
    creeUniteElt1.setEnabled(false);
583
    creeUniteElt2.setEnabled(false);
584
  }
585
  private void etatSelectElts(Element elt1, Element elt2) { // Elt1 et Elt2 ont été choisis et ils ne forment pas encore de relation
586
    panneauTexte.saisir(elt1.getUnite0(), elt1.getUnitesSousjacentes(), TypeMarquage.SELECT2,
587
            elt2.getUnitesSousjacentes(), TypeMarquage.SELECT3);
588
    panneauChamps.effacer();
589
    if (!saisieTypeRelations.pasdeSelection()) {
590
      creeRelation.setEnabled(true);
591
//      Boutons.setDefaut(creeRelation, true);
592
    }
593
    supprimeRelation.setEnabled(false);
594
    creeUniteElt1.setEnabled(false);
595
    creeUniteElt2.setEnabled(false);
596
  }
597
  private void etatSelectRel(Relation rel) {  // une relation est sélectionnée
598
    panneauTexte.saisir(rel.getElt1().getUnite0(),
599
            rel.getElt1().getUnitesSousjacentes(), TypeMarquage.SELECT1_2,
600
            rel.getElt2().getUnitesSousjacentes(), TypeMarquage.SELECT1_3);
601
//            Element.getUnitesSousjacentes(saisieElt1.getElements()), TypeMarquage.FOND2,
602
//            Element.getUnitesSousjacentes(saisieElt2.getElements()), TypeMarquage.FOND3);
603
    panneauChamps.afficher(rel);
604
    creeRelation.setEnabled(false);
605
    supprimeRelation.setEnabled(true);
606
    creeUniteElt1.setEnabled(false);
607
    creeUniteElt2.setEnabled(false);
608
  }
609
  private Relation[] filtreElt1(Relation[] relations) {
610
    Class classe = saisieTypeElt1.getClasseSelection();
611
    String type = saisieTypeElt1.getTypeSelection();
612
    ArrayList<Integer> indsAOter = new ArrayList<Integer>();
613
    for (int i = 0; i<relations.length; i++) {
614
      Element elt1 = relations[i].getElt1();
615
      if (elt1.getClass()!=classe||!elt1.getType().equals(type))
616
        indsAOter.add(i);
617
    }
618
    return Tableaux.oterRelations(relations, indsAOter);
619
  }
620
  private Relation[] filtreElt1(Relation[] relations, Element elt1) {
621
    ArrayList<Relation> rels = new ArrayList<Relation>();
622
    for (Relation rel : relations) if (elt1==rel.getElt1()) rels.add(rel);
623
    return rels.toArray(new Relation[0]);
624
  }
625
  private Relation[] filtreElt2(Relation[] relations) {
626
    Class classe = saisieTypeElt2.getClasseSelection();
627
    String type = saisieTypeElt2.getTypeSelection();
628
    ArrayList<Integer> indsAOter = new ArrayList<Integer>();
629
    for (int i = 0; i<relations.length; i++) {
630
      Element elt2 = relations[i].getElt2();
631
      if (elt2.getClass()!=classe||!elt2.getType().equals(type))
632
        indsAOter.add(i);
633
    }
634
    return Tableaux.oterRelations(relations, indsAOter);
635
  }
636
  private Relation[] filtreElt2(Relation[] relations, Element elt2) {
637
    ArrayList<Relation> rels = new ArrayList<Relation>();
638
    for (Relation rel : relations) if (elt2==rel.getElt2()) rels.add(rel);
639
    return rels.toArray(new Relation[0]);
640
  }
641
  private Relation[] filtreElts(Relation[] relations) {
642
    Class classe1 = saisieTypeElt1.getClasseSelection();
643
    String type1 = saisieTypeElt1.getTypeSelection();
644
    Class classe2 = saisieTypeElt2.getClasseSelection();
645
    String type2 = saisieTypeElt2.getTypeSelection();
646
    ArrayList<Integer> indsAOter = new ArrayList<Integer>();
647
    for (int i = 0; i<relations.length; i++) {
648
      Element elt1 = relations[i].getElt1();
649
      Element elt2 = relations[i].getElt2();
650
      if (elt1.getClass()!=classe1||!elt1.getType().equals(type1)
651
              ||elt2.getClass()!=classe2||!elt2.getType().equals(type2))
652
        indsAOter.add(i);
653
    }
654
    return Tableaux.oterRelations(relations, indsAOter);
655
  }
656
  private void checkEtatSelectElts(Element elt1, Element elt2) {
657
    if (!saisieTypeRelations.pasdeSelection())
658
      for (Relation rel : (Relation[]) saisieRelation.getElements()) {
659
        if (rel.getElt1()==elt1&&rel.getElt2()==elt2) {
660
          saisieRelation.setSelection(rel);
661
          return;
662
        }
663
      }
664
    etatSelectElts(elt1, elt2);
665
  }
666
  private void forceEtatSelectRel(Relation rel) {
667
    if (saisieTypeElt1.pasdeSelection()||saisieTypeElt1.getClasseSelection()!=rel.getElt1().getClass()
668
            ||!saisieTypeElt1.getTypeSelection().equals(rel.getElt1().getType())) {
669
      saisieTypeElt1.removeActionListener(this);
670
      saisieTypeElt1.setSelection(rel.getElt1().getClass(), rel.getElt1().getType());
671
      saisieTypeElt1.addActionListener(this);
672
    }
673
    initSaisieElt1(rel.getElt1());
674
    if (saisieTypeElt2.pasdeSelection()||saisieTypeElt2.getClasseSelection()!=rel.getElt2().getClass()
675
            ||!saisieTypeElt2.getTypeSelection().equals(rel.getElt2().getType())) {
676
      saisieTypeElt2.removeActionListener(this);
677
      saisieTypeElt2.setSelection(rel.getElt2().getClass(), rel.getElt2().getType());
678
      saisieTypeElt2.addActionListener(this);
679
    }
680
    initSaisieElt2(rel.getElt2());
681
    etatSelectRel(rel);
682
  }
683
  private void forceEffSelectElt1() {
684
    if (saisieElt1.pasdeSelection()) return;
685
    if (!saisieRelation.pasdeSelection()) {
686
      saisieRelation.removeActionListener(this);
687
      saisieRelation.effSelection();
688
      saisieRelation.addActionListener(this);
689
    }
690
    saisieElt1.effSelection();
691
  }
692
  private void forceEffSelectElt2() {
693
    if (saisieElt2.pasdeSelection()) return;
694
    if (!saisieRelation.pasdeSelection()) {
695
      saisieRelation.removeActionListener(this);
696
      saisieRelation.effSelection();
697
      saisieRelation.addActionListener(this);
698
    }
699
    saisieElt2.effSelection();
700
  }
701
  private void forceEffSelectRel() {
702
    if (saisieRelation.pasdeSelection()) return;
703
    saisieRelation.removeActionListener(this);
704
    saisieRelation.effSelection();
705
    saisieRelation.addActionListener(this);
706
  }
707
  private void initSaisieRelation(Relation rel) {
708
    saisieRelation.removeActionListener(this);
709
    if (saisieTypeRelations.pasdeSelection()) saisieRelation.setModeleVide();
710
    else {
711
      String type0 = saisieTypeRelations.getTypeSelection();
712
      Relation[] relations = vue.getRelationsAVoir(type0);
713
      saisieRelation.setModele(relations, vue.getIdRelations(type0, relations));
714
    }
715
    if (rel==null) saisieRelation.effSelection();
716
    else saisieRelation.setSelection(rel);
717
    saisieRelation.addActionListener(this);
718
    saisieRelation.revalidate();
719
  }
720
  private void initSaisieRelation() {
721
    initSaisieRelation(null);
722
  }
723
  private void initSaisieElt1(Element elt1) {
724
    saisieElt1.removeActionListener(this);
725
    if (saisieTypeElt1.pasdeSelection()) saisieElt1.setModeleVide();
726
    else {
727
      Class<? extends Element> classe = saisieTypeElt1.getClasseSelection();
728
      String type = saisieTypeElt1.getTypeSelection();
729
      saisieElt1.setModele(vue.getElements(classe, type), vue.getIdElements(classe, type));
730
    }
731
    if (elt1==null) saisieElt1.effSelection();
732
    else saisieElt1.setSelection(elt1);
733
    saisieElt1.addActionListener(this);
734
    saisieElt1.revalidate();
735
  }
736
  private void initSaisieElt1() {
737
    initSaisieElt1(null);
738
  }
739
  private void initSaisieElt2(Element elt2) {
740
    saisieElt2.removeActionListener(this);
741
    if (saisieTypeElt2.pasdeSelection()) saisieElt2.setModeleVide();
742
    else {
743
      Class<? extends Element> classe = saisieTypeElt2.getClasseSelection();
744
      String type = saisieTypeElt2.getTypeSelection();
745
      saisieElt2.setModele(vue.getElements(classe, type), vue.getIdElements(classe, type));
746
    }
747

    
748
    if (elt2==null) saisieElt2.effSelection();
749
    else saisieElt2.setSelection(elt2);
750
    saisieElt2.addActionListener(this);
751
    saisieElt2.revalidate();
752
  }
753
  private void initSaisieElt2() {
754
    initSaisieElt2(null);
755
  }
756
}