Statistiques
| Révision :

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

Historique | Voir | Annoter | Télécharger (19,51 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.*;
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 PanneauCommandesSchemas extends PanneauCommandes implements ActionListener {
27
  private PanneauChamps panneauChamps;
28
  private TypeComboBox saisieTypeSchemas;
29
  private ElementComboBox saisieSchema;
30
  private TypeComboBox saisieTypeElt;
31
  private ElementComboBox saisieElt;
32
  private JButton creeSchema;
33
  private JButton supprimeSchema;
34
  private JButton ajouteElement;
35
  private JButton oteElement;
36
  private JButton creeUniteElt;
37
  private int[] bornesSelectTexte;
38
  /*
39
  
40
   * CREATION PAR LE PANNEAU EDITEUR
41
   */
42
  PanneauCommandesSchemas(Vue vue, PanneauAffTexte pTexte, PanneauChamps pChamps) {
43
    super(vue, pTexte);
44
    JToolBar barre1 = new JToolBar();
45
    barre1.setPreferredSize(new Dimension(0, 22));
46
//    barre1.setBackground(PanneauTexte.getCouleurFond1());
47
    barre1.setAlignmentX(0.0f);
48
    //    barre1.setFloatable(false);
49
    add(barre1);
50
    JToolBar barre2 = new JToolBar();
51
    barre2.setPreferredSize(new Dimension(0, 22));
52
//    barre2.setBackground(PanneauTexte.getCouleurFond2());
53
    barre2.setAlignmentX(0.0f);
54
//     barre2.setFloatable(false);
55
    add(barre2);
56
    panneauChamps = pChamps;
57
    saisieTypeSchemas = new TypeComboBox(Schema.class);
58
    saisieTypeSchemas.addActionListener(this);
59
    saisieSchema = new ElementComboBox();
60
    saisieSchema.addActionListener(this);
61
    saisieTypeElt = new TypeComboBox(Element.class);
62
    saisieTypeElt.addActionListener(this);
63
    saisieElt = new ElementComboBox();
64
    saisieElt.addActionListener(this);
65
    creeSchema = new JButton(new GAction("Créer") {
66
      public void executer() {
67
        creerSchema();
68
      }
69
    });
70
    supprimeSchema = new JButton(new GAction("Supprimer") {
71
      public void executer() {
72
        supprimerSchema();
73
      }
74
    });
75
    ajouteElement = new JButton(new GAction("Ajouter") {
76
      public void executer() {
77
        ajouterElement();
78
      }
79
    });
80
    oteElement = new JButton(new GAction("Oter") {
81
      public void executer() {
82
        oterElement();
83
      }
84
    });
85
    creeUniteElt = new JButton(new GAction("Créer") {
86
      public void executer() {
87
        creerUniteElt();
88
      }
89
    });
90
    barre1.addSeparator();
91
    barre1.add(new TitreBarre("Schéma : ", PanneauTexte.getCouleurFond1()));
92
    barre1.addSeparator();
93
    barre1.add(saisieTypeSchemas);
94
    barre1.add(saisieSchema);
95
    barre1.addSeparator();
96
    barre1.add(creeSchema);
97
    barre1.addSeparator();
98
    barre1.add(supprimeSchema);
99
    barre2.addSeparator();
100
    barre2.add(new TitreBarre("Elément : ", PanneauTexte.getCouleurFond2()));
101
    barre2.addSeparator();
102
    barre2.add(saisieTypeElt);
103
    barre2.add(saisieElt);
104
    barre2.addSeparator();
105
    barre2.add(ajouteElement);
106
    barre2.add(oteElement);
107
    barre2.add(creeUniteElt);
108
  }
109

    
110
  /*
111
   * COMMANDES UTILISEES PAR LE PANNEAU EDITEUR
112
   */
113
  public void reinitialiser() {
114
    // typiquement, appelé par le panneau éditeur à la suite d'une modif de vue ou de structure
115
    saisieTypeSchemas.removeActionListener(this);
116
    saisieTypeSchemas.setModele(vue.getTypesSchemasAVoir());
117
    saisieTypeSchemas.effSelection();
118
    saisieTypeSchemas.addActionListener(this);
119
    saisieTypeElt.removeActionListener(this);
120
    saisieTypeElt.setModele(vue.getTypes(Unite.class), vue.getTypes(Relation.class), vue.getTypes(Schema.class));
121
    saisieTypeElt.effSelection();
122
    saisieTypeElt.addActionListener(this);
123
    initSaisieSchema();
124
    initSaisieElt();
125
    etatSelectRien();
126
    revalidate();
127
    repaint();
128
  }
129
  public void reafficher() {
130
    // potentiellement appelé par le panneau éditeur ?
131
    // appelé aussi par  traiterElementEvent
132
    if (saisieSchema.pasdeSelection()) {
133
      initSaisieSchema();
134
      if (saisieElt.pasdeSelection()) {
135
        initSaisieElt();
136
        etatSelectRien();
137
      } else {
138
        Element eltCourant = saisieElt.getSelection();
139
        initSaisieElt(eltCourant);
140
        etatSelectElt(eltCourant);
141
      }
142
    } else {
143
      Schema schCourant = (Schema) saisieSchema.getSelection();
144
      initSaisieSchema(schCourant);
145
      if (saisieElt.pasdeSelection()) {
146
        initSaisieElt();
147
        etatSelectSchema(schCourant);
148
      } else {
149
        Element eltCourant = saisieElt.getSelection();
150
        initSaisieElt(eltCourant);
151
        etatSelectSchemaElt(schCourant, eltCourant);
152
      }
153
    }
154
  }
155
   public void elementSuivant(int sens) {
156
    if (sens>0) saisieSchema.gotoSuivant();
157
    else saisieSchema.gotoPrecedent();
158
  }
159
 public Element elementSelectionne() {
160
    if (saisieSchema.pasdeSelection()) return null;
161
    return saisieSchema.getSelection();
162
  }
163
  public void editerElement(Element elt) {
164
    // appelé par le panneauEditeur : elt est forcément un schéma
165
    if (elt.getClass() != Schema.class) throw new UnsupportedOperationException("Erreur : classe incorrecte");
166
    editerSchema((Schema) elt);
167
  }
168
  public void traiterElementEvent(ElementEvent evt) {
169
    switch (evt.getModif()) {
170
      case AJOUT_SCHEMA:
171
      case MODIF_SCHEMA:
172
        Schema sch = (Schema) evt.getElement();
173
        editerSchema(sch);
174
        return;
175
      case SUP_SCHEMA:
176
        if (evt.getElement() == saisieSchema.getSelection()) {
177
          initSaisieSchema();
178
          initSaisieElt();
179
          etatSelectRien();
180
        } else {
181
          reafficher();
182
        }
183
        return;
184
      case AJOUT_UNITE:
185
        if (saisieTypeElt.getClasseSelection() == Unite.class ||
186
                evt.getElement().getType().equals(saisieTypeElt.getTypeSelection())) {
187
          initSaisieElt(evt.getElement());
188
        }
189
        reafficher();
190
        return;
191
      case SUP_UNITE:
192
      case SUP_RELATION:
193
      case BORNES_UNITE:
194
      case AJOUT_RELATION:
195
      case MODIF_VALEUR:
196
        reafficher();
197
        return;
198
      default:
199
        throw new UnsupportedOperationException("Cas " + evt.getModif() + " oublié dans un switch");
200
    }
201
  }
202
  public void editerSchema(Schema sch) {
203
    // appelé  par traiterElementEvent, 
204
    // et aussi directement par le panneau éditeur quand il est sollicité par d'autres fenêtres
205
    if (!sch.getType().equals(saisieTypeSchemas.getTypeSelection())) {
206
      saisieTypeSchemas.removeActionListener(this);
207
      saisieTypeSchemas.setSelection(sch.getType());
208
      saisieTypeSchemas.addActionListener(this);
209
    }
210
    initSaisieSchema(sch);
211
    saisieSchema.setSelection(sch);
212
  }
213
  public void editerSchemaElement(Schema sch, Element elt) {
214
    // appelé  par le panneau éditeur  sollicité par VisuChaines 
215
    if (!sch.getType().equals(saisieTypeSchemas.getTypeSelection())) {
216
      saisieTypeSchemas.removeActionListener(this);
217
      saisieTypeSchemas.setSelection(sch.getType());
218
      saisieTypeSchemas.addActionListener(this);
219
    }
220
    initSaisieSchema(sch);
221
    forceElt(elt);
222
  }
223
 public void editerElementTypeSchema(Element elt, String typesch) {
224
    // appelé  par le panneau éditeur  sollicité par VisuChaines 
225
    if (!typesch.equals(saisieTypeSchemas.getTypeSelection())) {
226
      saisieTypeSchemas.removeActionListener(this);
227
      saisieTypeSchemas.setSelection(typesch);
228
      saisieTypeSchemas.addActionListener(this);
229
    }
230
    initSaisieSchema();
231
    forceElt(elt);
232
  }
233
  public ArrayList<ElementMarque> trouverElementsVises(Unite uniteVisee, TypeMarquage marqueUniteVisee,
234
          boolean avecId) {
235
    ArrayList<ElementMarque> eltsMarques = new ArrayList<ElementMarque>();
236
    ArrayList<Element> eltsVises;
237
    Element eltVise;
238
    switch (marqueUniteVisee) {
239
      case FOND1:
240
        eltsVises = Element.trouverElementsParUniteSousjacente(saisieSchema.getElements(), uniteVisee);
241
        for (Element elt : eltsVises) eltsMarques.add(new ElementMarque(
242
                  elt, marqueUniteVisee, avecId ? saisieSchema.getIdElement(elt) : null));
243
        return eltsMarques;
244
      case FOND1_2:
245
      case FOND2:
246
        eltsVises = Element.trouverElementsParUniteSousjacente(saisieElt.getElements(), uniteVisee);
247
        for (Element elt : eltsVises) eltsMarques.add(new ElementMarque(
248
                  elt, marqueUniteVisee, avecId ? saisieElt.getIdElement(elt) : null));
249
        return eltsMarques;
250
      case SELECT1:
251
        eltVise = saisieSchema.getSelection();
252
        eltsMarques.add(new ElementMarque(
253
                  eltVise, marqueUniteVisee, avecId ? saisieSchema.getIdElement(eltVise) : null));
254
        return eltsMarques;
255
      case SELECT1_2:
256
      case SELECT2:
257
        eltVise = saisieElt.getSelection();
258
        eltsMarques.add(new ElementMarque(
259
                eltVise, marqueUniteVisee, avecId ? saisieElt.getIdElement(eltVise) : null));
260
        return eltsMarques;       
261
      default:
262
        throw new UnsupportedOperationException("Marquage non prévu : " + marqueUniteVisee);
263

    
264
    }
265
  }
266
  /*
267
   * ACTIONS DE L'UTILISATEUR : CHANGEMENTS D'ETAT
268
   */
269
  public void actionPerformed(ActionEvent evt) {
270
    try {
271
      if (evt.getSource() == saisieTypeSchemas) {
272
        initSaisieSchema();
273
        if (saisieElt.pasdeSelection()) etatSelectRien();
274
        else etatSelectElt(saisieElt.getSelection());
275
        return;
276
      }
277
      if (evt.getSource() == saisieTypeElt) {
278
        initSaisieElt();
279
        if (saisieSchema.pasdeSelection()) etatSelectRien();
280
        else etatSelectSchema((Schema) saisieSchema.getSelection());
281
        return;
282
      }
283
      if (evt.getSource() == saisieSchema) {
284
        if (saisieSchema.pasdeSelection()) {
285
          if (saisieElt.pasdeSelection()) etatSelectRien();
286
          else etatSelectElt(saisieElt.getSelection());
287
        } else {
288
          if (saisieElt.pasdeSelection()) etatSelectSchema((Schema) saisieSchema.getSelection());
289
          else etatSelectSchemaElt((Schema) saisieSchema.getSelection(), saisieElt.getSelection());
290
        }
291
        return;
292
      }
293
      if (evt.getSource() == saisieElt) {
294
        if (saisieElt.pasdeSelection()) {
295
          if (saisieSchema.pasdeSelection()) etatSelectRien();
296
          else etatSelectSchema((Schema) saisieSchema.getSelection());
297
        } else {
298
          if (saisieSchema.pasdeSelection()) etatSelectElt(saisieElt.getSelection());
299
          else etatSelectSchemaElt((Schema) saisieSchema.getSelection(), saisieElt.getSelection());
300
        }
301
        return;
302
      }
303
      throw new UnsupportedOperationException("Evénement non prévu : " + evt.paramString());
304
    } catch (Throwable ex) {
305
      GMessages.erreurFatale(ex);
306
    }
307
  }
308
  @Override
309
  public void traiterSourisEvent(SourisEvent evt) {
310
    switch (evt.getTypeEvent()) {
311
      case SELECT_RIEN:
312
        saisieElt.removeActionListener(this);
313
        saisieElt.effSelection();
314
        saisieElt.addActionListener(this);
315
        saisieSchema.effSelection();
316
        return;
317
      case SELECT_ELEMENT:
318
        switch (evt.getMarquageElementVise()) {
319
          case SELECT1:
320
            forceElt(evt.getElementVise());
321
            return;
322
          case SELECT2:
323
          case SELECT1_2:
324
            saisieSchema.effSelection();
325
            return;
326
          case FOND1:
327
            saisieSchema.setSelection(evt.getElementVise());
328
            return;
329
          case FOND2:
330
          case FOND1_2:
331
            saisieElt.setSelection(evt.getElementVise());
332
            return;
333
          default:
334
            throw new UnsupportedOperationException("Marquage non prévu : " + evt.getTypeEvent());
335
        }
336
      case SELECT_TEXTE:
337
        saisieElt.removeActionListener(this);
338
        saisieElt.effSelection();
339
        saisieElt.addActionListener(this);
340
        saisieSchema.removeActionListener(this);
341
        saisieSchema.effSelection();
342
        saisieSchema.addActionListener(this);
343
        bornesSelectTexte = evt.getBornesSelectionTexte();
344
        etatSelectTexte();
345
        return;
346
    }
347
    throw new UnsupportedOperationException("Evénement non prévu : " + evt.getTypeEvent());
348
  }
349

    
350
  /*
351
   * ACTIONS DE L'UTILISATEUR : BOUTONS
352
   */
353
  private void creerSchema() {
354
    vue.getCorpus().addSchemaSaisi(saisieTypeSchemas.getTypeSelection(), saisieElt.getSelection());
355
  }
356
  private void creerUniteElt() {
357
    if (vue.getCorpus().checkPresenceUnite(saisieTypeElt.getTypeSelection(), bornesSelectTexte[0], bornesSelectTexte[1]) &&
358
            !GMessages.confirmationAction("Dupliquer cette unité  ?")) return;
359
    vue.getCorpus().addUniteSaisie(saisieTypeElt.getTypeSelection(),  bornesSelectTexte[0], bornesSelectTexte[1]);
360
  }
361
  private void supprimerSchema() {
362
    if (!GMessages.confirmationAction("Supprimer le schéma sélectionné ?")) return;
363
    vue.getCorpus().supSchema((Schema) saisieSchema.getSelection());
364
  }
365
  private void ajouterElement() {
366
    vue.getCorpus().ajouterElementSchemaSaisi(saisieElt.getSelection(), (Schema) saisieSchema.getSelection());
367
  }
368
  private void oterElement() {
369
    vue.getCorpus().oterElementSchema(saisieElt.getSelection(), (Schema) saisieSchema.getSelection());
370
  }
371

    
372
  /* 
373
   * GESTION INTERNE
374
   */
375
  private void etatSelectRien() { // ni Sch ni Elt n'ont été saisis
376
    if (saisieTypeElt.pasdeSelection()) {
377
      if (saisieTypeSchemas.pasdeSelection()) panneauTexte.pasDeMarquage();
378
      else panneauTexte.saisir(null,
379
                Element.getUnitesSousjacentes(saisieSchema.getElements()), TypeMarquage.FOND1);
380
    } else {
381
      if (saisieTypeSchemas.pasdeSelection()) panneauTexte.saisir(null,
382
                Element.getUnitesSousjacentes(saisieElt.getElements()), TypeMarquage.FOND2);
383
      else panneauTexte.saisir(null,
384
                Element.getUnitesSousjacentes(saisieSchema.getElements()), TypeMarquage.FOND1,
385
                Element.getUnitesSousjacentes(saisieElt.getElements()), TypeMarquage.FOND2);
386
    }
387
    panneauChamps.effacer();
388
    creeSchema.setEnabled(false);
389
    supprimeSchema.setEnabled(false);
390
    ajouteElement.setEnabled(false);
391
    oteElement.setEnabled(false);
392
    creeUniteElt.setEnabled(false);
393
  }
394
  private void etatSelectTexte() { // du texte a été sélectionné
395
    if (saisieTypeElt.pasdeSelection()) {
396
      if (saisieTypeSchemas.pasdeSelection()) panneauTexte.pasDeMarquage();
397
      else panneauTexte.saisir(null,
398
                Element.getUnitesSousjacentes(saisieSchema.getElements()), TypeMarquage.FOND1);
399
    } else {
400
      if (saisieTypeSchemas.pasdeSelection()) panneauTexte.saisir(null,
401
                Element.getUnitesSousjacentes(saisieElt.getElements()), TypeMarquage.FOND2);
402
      else panneauTexte.saisir(null,
403
                Element.getUnitesSousjacentes(saisieSchema.getElements()), TypeMarquage.FOND1,
404
                Element.getUnitesSousjacentes(saisieElt.getElements()), TypeMarquage.FOND2);
405
    }
406
    panneauChamps.effacer();
407
    creeSchema.setEnabled(false);
408
    supprimeSchema.setEnabled(false);
409
    ajouteElement.setEnabled(false);
410
    oteElement.setEnabled(false);
411
    if (!saisieTypeElt.pasdeSelection() && saisieTypeElt.getClasseSelection() == Unite.class)
412
      creeUniteElt.setEnabled(true);
413
  }
414
  private void etatSelectElt(Element elt) {  // seul Elt a été choisi 
415
    if (saisieTypeSchemas.pasdeSelection()) panneauTexte.saisir(elt.getUnite0(),
416
              elt.getUnitesSousjacentes(), TypeMarquage.SELECT2);
417
    else panneauTexte.saisir(elt.getUnite0(), elt.getUnitesSousjacentes(), TypeMarquage.SELECT2,
418
              Element.getUnitesSousjacentes(saisieSchema.getElements()), TypeMarquage.FOND1);
419
    panneauChamps.afficher(elt);
420
    if (!saisieTypeSchemas.pasdeSelection()) {
421
      creeSchema.setEnabled(true);
422
      Boutons.setDefaut(creeSchema, true);
423
    }
424
    supprimeSchema.setEnabled(false);
425
    ajouteElement.setEnabled(false);
426
    oteElement.setEnabled(false);
427
    creeUniteElt.setEnabled(false);
428
  }
429
  private void etatSelectSchema(Schema sch) { // seul Sch a été choisi
430
    if (saisieTypeElt.pasdeSelection()) panneauTexte.saisir(sch.getUnite0(),
431
              sch.getUnitesSousjacentes(), TypeMarquage.SELECT1);
432
    else panneauTexte.saisir(sch.getUnite0(),
433
              sch.getUnitesSousjacentes(), TypeMarquage.SELECT1,
434
              Element.getUnitesSousjacentes(filtreSch(saisieElt.getElements(), (Schema[])saisieSchema.getElements())),
435
              TypeMarquage.FOND1_2,
436
              Element.getUnitesSousjacentes(saisieElt.getElements()), TypeMarquage.FOND2);
437
    panneauChamps.afficher(sch);
438
    creeSchema.setEnabled(false);
439
    supprimeSchema.setEnabled(true);
440
    ajouteElement.setEnabled(false);
441
    oteElement.setEnabled(false);
442
    creeUniteElt.setEnabled(false);
443
  }
444
  private void etatSelectSchemaElt(Schema sch, Element elt) {
445
    if (sch.contient(elt)) etatSelectSchemaEltInterne(sch, elt);
446
    else etatSelectSchemaEltExterne(sch, elt);
447
  }
448
  private void etatSelectSchemaEltInterne(Schema sch, Element elt) {
449
    panneauTexte.saisir(elt.getUnite0(),
450
            elt.getUnitesSousjacentes(), TypeMarquage.SELECT1_2,
451
            sch.getUnitesSousjacentes(), TypeMarquage.SELECT1);
452
    panneauChamps.afficher(elt);
453
    creeSchema.setEnabled(false);
454
    ajouteElement.setEnabled(false);
455
    if (sch.getContenu().size() > 1) {
456
      oteElement.setEnabled(true);
457
      supprimeSchema.setEnabled(false);
458
    } else {
459
      oteElement.setEnabled(false);
460
      supprimeSchema.setEnabled(true);
461
    }
462
    creeUniteElt.setEnabled(false);
463
  }
464
  private void etatSelectSchemaEltExterne(Schema sch, Element elt) {
465
    panneauTexte.saisir(elt.getUnite0(),
466
            sch.getUnitesSousjacentes(), TypeMarquage.SELECT1,
467
            elt.getUnitesSousjacentes(), TypeMarquage.SELECT2);
468
    panneauChamps.afficher(sch);
469
    creeSchema.setEnabled(false);
470
    supprimeSchema.setEnabled(false);
471
    ajouteElement.setEnabled(true);
472
    oteElement.setEnabled(false);
473
    creeUniteElt.setEnabled(false);
474
  }
475
  private void forceElt(Element elt) {
476
    if (saisieTypeElt.getClasseSelection() != elt.getClass() || !elt.getType().equals(saisieTypeElt.getTypeSelection())) {
477
      saisieTypeElt.removeActionListener(this);
478
      saisieTypeElt.setSelection(elt.getClass(), elt.getType());
479
      saisieTypeElt.addActionListener(this);
480
      initSaisieElt();
481
    }
482
    saisieElt.setSelection(elt);
483
  }
484
  private Element[] filtreSch(Element[] elts, Schema[] schs) {
485
    ArrayList<Element> elts1 = new ArrayList<Element>();
486
    for (Element elt : elts) for(Schema sch: schs) if(sch.getContenu().contains(elt)) {
487
      elts1.add(elt);
488
      break;
489
    }
490
    return elts1.toArray(new Element[0]);
491
  }
492
  private void initSaisieSchema(Schema sch) {
493
    saisieSchema.removeActionListener(this);
494
    if (saisieTypeSchemas.pasdeSelection()) saisieSchema.setModeleVide();
495
    else {
496
      String type0 = saisieTypeSchemas.getTypeSelection();
497
      Schema[] schemas = vue.getSchemasAVoir(type0);
498
      saisieSchema.setModele(schemas, vue.getIdSchemas(type0, schemas));
499
    }
500
    if (sch == null) saisieSchema.effSelection();
501
    else saisieSchema.setSelection(sch);
502
    saisieSchema.addActionListener(this);
503
    saisieSchema.revalidate();
504
  }
505
  private void initSaisieSchema() {
506
    initSaisieSchema(null);
507
  }
508
  private void initSaisieElt(Element elt) {
509
    saisieElt.removeActionListener(this);
510
    if (saisieTypeElt.pasdeSelection()) saisieElt.setModeleVide();
511
    else {
512
      Class<? extends Element> classe = saisieTypeElt.getClasseSelection();
513
      String type = saisieTypeElt.getTypeSelection();
514
      saisieElt.setModele(vue.getElements(classe, type), vue.getIdElements(classe, type));
515
    }
516
    if (elt == null) saisieElt.effSelection();
517
    else saisieElt.setSelection(elt);
518
    saisieElt.addActionListener(this);
519
    saisieElt.revalidate();
520
  }
521
  private void initSaisieElt() {
522
    initSaisieElt(null);
523
  }
524
}