Statistiques
| Révision :

root / tmp / org.txm.analec.rcp / src matt / visuAnalec / VisuMain.java @ 3225

Historique | Voir | Annoter | Télécharger (16,17 ko)

1
package visuAnalec;
2

    
3
/**
4
 *
5
 * @author bernard
6
 */
7
import javax.swing.*;
8
import java.awt.event.*;
9
import java.awt.*;
10
import java.io.*;
11
import javax.swing.table.TableModel;
12
import visuAnalec.Message.*;
13
import visuAnalec.chaines.*;
14
import visuAnalec.donnees.*;
15
import visuAnalec.fichiers.*;
16
import visuAnalec.statistiques.*;
17
import visuAnalec.util.*;
18
import visuAnalec.util.GMessages.*;
19
import visuAnalec.vue.*;
20
import visuAnalec.vue.Vue.*;
21

    
22
@SuppressWarnings("serial")
23
public class VisuMain extends JFrame implements VueListener {
24
  private Corpus corpus;
25
  private Vue vue;
26
  private PanneauEditeur panneauEditeur;
27
  private String nomCorpus = "";
28
  private String nomVue = "";
29
  private static String[] args;
30
  VisuMain() {
31
    super();
32
    corpus = new Corpus();
33
    vue = new Vue(corpus);
34
    panneauEditeur = new PanneauEditeur(vue);
35
    vue.addEventListener(this);
36
    // Cadre global de la fenêtre
37
    setContentPane(panneauEditeur);
38
    // Menus
39
    JMenuBar menuBar = new JMenuBar();
40
    setJMenuBar(menuBar);
41

    
42
    // Menu corpus
43
    JMenu corpusMenu = new JMenu("Documents");
44
    menuBar.add(corpusMenu);
45
    corpusMenu.add(new GAction("Ouvrir...") {
46
      public void executer() {
47
        if (!sauvegarde()) return;
48
        corpus.fermer();
49
        FichiersJava.ouvrirCorpusVue(corpus, vue, "");
50
        //       System.out.println(corpus.getStructure());
51
      }
52
    });
53
    JMenuItem item;
54
    corpusMenu.add(item = new JMenuItem(new GAction("Enregistrer") {
55
      public void executer() {
56
        if (corpus.isVide()) return;
57
        if (!nomCorpus.isEmpty()) {
58
          File fichier = Fichiers.getFichierCourant(Fichiers.TypeFichier.DOC_ANALEC);
59
          if (FichiersJava.enregistrerCorpus(corpus, fichier)) setTitre();
60
        } else if (FichiersJava.enregistrerCorpusSous(corpus)) {
61
          nomCorpus = Fichiers.getNomFichierCourant(Fichiers.TypeFichier.DOC_ANALEC);
62
          setTitre();
63
        }
64
      }
65
    }));
66
    corpusMenu.add(new GAction("Enregistrer sous...") {
67
      public void executer() {
68
        if (FichiersJava.enregistrerCorpusSous(corpus)) {
69
          nomCorpus = Fichiers.getNomFichierCourant(Fichiers.TypeFichier.DOC_ANALEC);
70
          setTitre();
71
        }
72
      }
73
    });
74
    corpusMenu.add(new GAction("Fermer") {
75
      public void executer() {
76
        if (!sauvegarde()) return;
77
        corpus.fermer();
78
      }
79
    });
80
    corpusMenu.insertSeparator(corpusMenu.getMenuComponentCount());
81
    corpusMenu.add(new GAction("Fusionner des annotations") {
82
      public void executer() {
83
        if (!sauvegarde()) return;
84
        FichiersJava.fusionnerAnnot(corpus);
85
      }
86
    });
87
    corpusMenu.add(new GAction("Concaténer deux documents") {
88
      public void executer() {
89
        if (!sauvegarde()) return;
90
        FichiersJava.concatenerDocuments(corpus);
91
      }
92
    });
93
    corpusMenu.add(new GAction("Concaténer un corpus") {
94
      public void executer() {
95
        if (!sauvegarde()) return;
96
        corpus.fermer();
97
        FichiersJava.concatenerCorpus(corpus);
98
      }
99
    });
100
    corpusMenu.add(new GAction("Extraire un type d'un corpus") {
101
      public void executer() {
102
        if (!sauvegarde()) return;
103
        String type = JOptionPane.showInputDialog("Nom du type d'unité à extraire");
104
        if (type==null) return;
105
        corpus.fermer();
106
        FichiersJava.extraireTypeCorpus(type, corpus);
107
      }
108
    });
109
    corpusMenu.insertSeparator(corpusMenu.getMenuComponentCount());
110
    corpusMenu.add(new GAction("Importer du texte brut...") {
111
      public void executer() {
112
        if (!sauvegarde()) return;
113
        int rep = 0;
114
        if (!corpus.getStructure().isVide()) {
115
          rep = JOptionPane.showOptionDialog(null, "Utiliser la structure actuelle pour le nouveau document ?",
116
                  "Structure déjà présente", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE,
117
                  null, new Object[]{"Oui", "Non", "Annuler"}, "Oui");
118
          if (rep==2) return;
119
        }
120
        if (rep==0) corpus.fermerConserverStructure();
121
        else corpus.fermer();
122
        FichiersTexte.importerTexte(corpus);
123
      }
124
    });
125
    corpusMenu.add(new GAction("Importer des données Excel...") {
126
      public void executer() {
127
        if (!sauvegarde()) return;
128
        corpus.fermer();
129
        FichiersTableur.importerExcel(corpus);
130
      }
131
    });
132
    corpusMenu.add(new GAction("Importer des données Syntex...") {
133
      public void executer() {
134
        if (!sauvegarde()) return;
135
        corpus.fermer();
136
        FichiersSyntex.importerSyntex(corpus);
137
      }
138
    });
139
    corpusMenu.add(new GAction("Importer des données Glozz...") {
140
      public void executer() {
141
        if (!sauvegarde()) return;
142
        corpus.fermer();
143
        FichiersGlozz.importerGlozz(corpus);
144
      }
145
    });
146
    corpusMenu.add(new GAction("Exporter des données Glozz...") {
147
      public void executer() {
148
        FichiersGlozz.exporterGlozz(corpus);
149
      }
150
    });
151
    corpusMenu.add(new GAction("Convertir un corpus Glozz...") {
152
      public void executer() {
153
        if (!sauvegarde()) return;
154
        corpus.fermer();
155
        FichiersGlozz.convertirCorpusGlozz(corpus);
156
      }
157
    });
158
   corpusMenu.add(new GAction("Exporter un corpus TEI...") {
159
      public void executer() {
160
        if (!sauvegarde()) return;
161
        corpus.fermer();
162
        FichiersTEI.exporterCorpusTEI(corpus);
163
      }
164
    });
165
   corpusMenu.add(new GAction("Convertir un corpus TEI...") {
166
      public void executer() {
167
        if (!sauvegarde()) return;
168
        corpus.fermer();
169
        FichiersTEI.convertirCorpusTEI(corpus);
170
     }
171
    });
172
   corpusMenu.add(new GAction("Importer un document CoNLL...") {
173
      public void executer() {
174
        if (!sauvegarde()) return;
175
        corpus.fermer();
176
        FichiersCoNLL.importerCoNLL(corpus);
177
     }
178
    });
179
    corpusMenu.insertSeparator(corpusMenu.getMenuComponentCount());
180
    corpusMenu.add(new GAction("Quitter") {
181
      public void executer() {
182
        fermerFenetre();
183
      }
184
    });
185

    
186
    // Menu structure
187
    JMenu structureMenu = new JMenu("Structure");
188
    menuBar.add(structureMenu);
189
    structureMenu.add(new GAction("Gestion de la structure...") {
190
      public void executer() {
191
        VisuStructure visuStructure = VisuStructure.newVisuStructure(getContentPane(), corpus);
192
        visuStructure.setExtendedState(NORMAL);
193
        visuStructure.setVisible(true);
194
        visuStructure.agencer();
195
      }
196
    });
197
    structureMenu.add(new GAction("Ouvrir...") {
198
      public void executer() {
199
        if (!fusionStructure()) return;
200
        FichiersJava.ouvrirStructure(corpus);
201
      }
202
    });
203
    structureMenu.add(item = new JMenuItem(new GAction("Enregistrer...") {
204
      public void executer() {
205
        FichiersJava.enregistrerStructure(corpus);
206
        setTitre();
207
      }
208
    }));
209
    structureMenu.add(new GAction("Importer un modèle Glozz...") {
210
      public void executer() {
211
        if (!fusionStructure()) return;
212
        FichiersGlozz.importerModeleGlozz(corpus);
213
        //       System.out.println(corpus.getStructure());
214
      }
215
    });
216
    structureMenu.add(new GAction("Exporter un modèle Glozz...") {
217
      public void executer() {
218
        FichiersGlozz.exporterModeleGlozz(corpus.getStructure());
219
      }
220
    });
221

    
222
    // Menu vue
223
    JMenu vueMenu = new JMenu("Vue");
224
    menuBar.add(vueMenu);
225
    vueMenu.add(new GAction("Gestion de la vue...") {
226
      public void executer() {
227
        VisuVue.newVisuVue(getContentPane(), vue);
228
      }
229
    });
230
    vueMenu.add(new GAction("Ouvrir (.ecv)...") {
231
      public void executer() {
232
        FichiersJava.ouvrirVue(vue);
233
      }
234
    });
235
    vueMenu.add(new GAction("Enregistrer (.ecv)...") {
236
      public void executer() {
237
        if (FichiersJava.enregistrerVue(vue)) {
238
          nomVue = Fichiers.getNomFichierCourant(Fichiers.TypeFichier.VUE);
239
          setTitre();
240
        }
241
      }
242
    });
243
    vueMenu.add(new GAction("Rétablir la vue par défaut") {
244
      public void executer() {
245
        nomVue = "";
246
        vue.retablirVueParDefaut();
247
      }
248
    });
249

    
250
    // Menu texte
251
    JMenu texteMenu = new JMenu("Texte");
252
    menuBar.add(texteMenu);
253
    texteMenu.add(new GAction("Modifier le texte") {
254
      public void executer() {
255
        panneauEditeur.initModifierTexte();
256
      }
257
    });
258
    texteMenu.insertSeparator(texteMenu.getMenuComponentCount());
259
    texteMenu.add(item = new JMenuItem(new GAction("Rechercher...") {
260
      public void executer() {
261
        panneauEditeur.initRechercherTexte();
262
      }
263
    }));
264
    item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, ActionEvent.CTRL_MASK));
265
    texteMenu.add(item = new JMenuItem(new GAction("Suivant") {
266
      public void executer() {
267
        panneauEditeur.rechercherSuivantTexte();
268
      }
269
    }));
270
    item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, ActionEvent.CTRL_MASK));
271
    texteMenu.insertSeparator(texteMenu.getMenuComponentCount());
272
    texteMenu.add(new GAction("Style du document...") {
273
      public void executer() {
274
        panneauEditeur.saisirStyleTexte(vue);
275
      }
276
    });
277
    texteMenu.add(new GAction("Exporter format RTF...") {
278
      public void executer() {
279
        FichiersTexte.exporterTexteRTF(panneauEditeur);
280
      }
281
    });
282
    texteMenu.add(new GAction("Exporter format HTML...") {
283
      public void executer() {
284
        FichiersTexte.exporterTexteHTML(panneauEditeur);
285
      }
286
    });
287

    
288

    
289
    // Menu unités
290
    JMenu unitesMenu = new JMenu("Unités");
291
    menuBar.add(unitesMenu);
292
    unitesMenu.add(new GAction("Gestion des unités") {
293
      public void executer() {
294
        panneauEditeur.initGestionUnites();
295
      }
296
    });
297
    unitesMenu.add(new GAction("Export des unités") {
298
      public void executer() {
299
        String type;
300
        String[] types = vue.getTypesUnitesAVoir();
301
        if(types==null||types.length==0) return;
302
        if(types.length==1) type = types[0];
303
        else type = (String) JOptionPane.showInputDialog(VisuMain.this, 
304
       "Type des unités à exporter", "Choix du type d'unités",
305
       JOptionPane.QUESTION_MESSAGE, null, types, "");
306
        if(type==null) return;
307
        type = type.trim();
308
        if(type.isEmpty()) return;       
309
        TableModel donnees = vue.tableauUnites(type);
310
        if(donnees!=null)  FichiersTableur.exporterTable(donnees);
311
      }
312
    });
313
    unitesMenu.insertSeparator(unitesMenu.getMenuComponentCount());
314
    unitesMenu.add(new GAction("Création d'unités typographiques") {
315
      public void executer() {
316
        GMessages.pasImplemente();
317
      }
318
    });
319
    unitesMenu.add(new GAction("Création d'unités de constituance") {
320
      public void executer() {
321
        GMessages.pasImplemente();
322
      }
323
    });
324

    
325
    // Menu relations
326
    JMenu relationsMenu = new JMenu("Relations");
327
    menuBar.add(relationsMenu);
328
    relationsMenu.add(new GAction("Gestion des relations") {
329
      public void executer() {
330
        panneauEditeur.initGestionRelations();
331
      }
332
    });
333
    relationsMenu.add(new GAction("Visualisation d'arborescences") {
334
      public void executer() {
335
        GMessages.pasImplemente();
336
      }
337
    });
338
    relationsMenu.add(new GAction("Saisie d'arborescences") {
339
      public void executer() {
340
        GMessages.pasImplemente();
341
      }
342
    });
343
    relationsMenu.add(new GAction("Création d'arborescences") {
344
      public void executer() {
345
        GMessages.pasImplemente();
346
      }
347
    });
348

    
349
    // Menu schémas
350
    JMenu schemasMenu = new JMenu("Schémas");
351
    menuBar.add(schemasMenu);
352
    schemasMenu.add(new GAction("Gestion des schémas") {
353
      public void executer() {
354
        panneauEditeur.initGestionSchemas();
355
      }
356
    });
357
    schemasMenu.add(new GAction("Visualisation de chaînes") {
358
      public void executer() {
359
        new VisuChaines(getContentPane(), vue, panneauEditeur);
360
      }
361
    });
362

    
363
    // Menu règles
364
    JMenu reglesMenu = new JMenu("Règles");
365
    menuBar.add(reglesMenu);
366
    // Menu Stats
367
    JMenu statsMenu = new JMenu("Statistiques");
368
    menuBar.add(statsMenu);
369
    statsMenu.add(new GAction("Fréquences...") {
370
      public void executer() {
371
        new VisuStatsFrequences(getContentPane(), vue, panneauEditeur);
372
      }
373
    });
374
    statsMenu.add(new GAction("Corrélations...") {
375
      public void executer() {
376
        new VisuStatsCorrelations(getContentPane(), vue, panneauEditeur);
377
      }
378
    });
379
    statsMenu.add(new GAction("Représentations géométriques...") {
380
      @SuppressWarnings("ResultOfObjectAllocationIgnored")
381
      public void executer() {
382
        new VisuStatsGeometrie(getContentPane(), vue, panneauEditeur);
383
      }
384
    });
385
    // Fermeture de la fenêtre
386
    setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
387
    addWindowListener(new WindowAdapter() {
388
      @Override
389
      public void windowClosing(WindowEvent evt) {
390
        fermerFenetre();
391
      }
392
    });
393

    
394
  }
395
  public void premierPlan() {
396
    if ((getExtendedState()&Frame.ICONIFIED)>0) {
397
      setExtendedState(getExtendedState()&~Frame.ICONIFIED);
398
    }
399
    toFront();
400

    
401
  }
402
  private void fermerFenetre() {
403
    sauvegarde();
404
  }
405
  boolean sauvegarde() {
406
    if (!corpus.isModifie()) return true;
407
    int rep = JOptionPane.showOptionDialog(this, "Sauvegarder le document en cours ?",
408
            "Document modifié", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE,
409
            null, new Object[]{"Oui", "Non", "Annuler"}, "Non");
410
    if (rep==2) {
411
      return false;
412
    }
413
    if (rep==0) {
414
      FichiersJava.enregistrerCorpusSous(corpus);
415
    }
416
    return true;
417
  }
418
  boolean fusionStructure() {
419
    if (corpus.getStructure().isVide()) return true;
420
    int rep = JOptionPane.showOptionDialog(this, "La nouvelle structure va être fusionnée avec la structure courante",
421
            "Structure déjà présente", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE,
422
            null, new Object[]{"Poursuivre", "Annuler"}, "Poursuivre");
423
    return rep==0;
424
  }
425
  public void traiterEvent(Message evt) {
426
    switch (evt.getType()) {
427
      case CLEAR_CORPUS:
428
        nomCorpus = "";
429
        Fichiers.removeFichierCourant(Fichiers.TypeFichier.DOC_ANALEC);
430
        setTitre();
431
        return;
432
      case NEW_CORPUS:
433
        nomCorpus = Fichiers.getNomFichierCourant(Fichiers.TypeFichier.DOC_ANALEC);
434
        setTitre();
435
        return;
436
      case MODIF_VUE:
437
        switch (((VueEvent) evt).getModif()) {
438
          case VUE_DEFAUT:
439
            nomVue = "";
440
            setTitre();
441
            return;
442
          case NEW_VUE:
443
            nomVue = Fichiers.getNomFichierCourant(Fichiers.TypeFichier.VUE);
444
            setTitre();
445
            return;
446
          case EXTRACTION:
447
            setTitre();
448
            return;
449
          default:
450
            throw new UnsupportedOperationException("Cas "+((VueEvent) evt).getModif()+" oublié dans un switch");
451
        }
452
      case MODIF_TEXTE:
453
      case MODIF_STRUCTURE:
454
      case MODIF_ELEMENT:
455
        setTitre();
456
        return;
457
      default:
458
        throw new UnsupportedOperationException("Cas "+evt.getType()+" oublié dans un switch");
459
    }
460
  }
461
  private void setTitre() {
462
    String titre = "Analec 1.5";
463
    if (!nomCorpus.isEmpty()) {
464
      titre += " : "+nomCorpus;
465
      if (corpus.isModifie()) titre += "*";
466
      if (nomVue.isEmpty()) {
467
        if (vue.isModifiee()) titre += " - vue modifiée*";
468
        else titre += " - vue par défaut";
469
      } else {
470
        titre += " - vue : "+nomVue;
471
        if (vue.isModifiee()) titre += "*";
472
      }
473
    }
474
    setTitle(titre);
475
  }
476
  public static void main(String[] args) {
477
    VisuMain.args = args;
478
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
479
      public void run() {
480
        try {
481
          // Fenêtre
482
          lancerVisuAnalec();
483
        } catch (Throwable ex) {
484
          GMessages.erreurFatale(ex);
485
        }
486
      }
487
    });
488
  }
489
  public static void lancerVisuAnalec() throws IOException, ClassNotFoundException {
490
    // Fenêtre
491
    VisuMain fenetre = new VisuMain();
492
    fenetre.setTitre();
493
    Rectangle rmax = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
494
    fenetre.setLocation(50, 50);
495
    fenetre.setSize(rmax.width-100, rmax.height-100);
496
    fenetre.setVisible(true);
497
    fenetre.panneauEditeur.agencerPanneaux();
498
    fenetre.traiterArguments(args);
499
//    System.out.println(fenetre.corpus.getStructure().toString());
500
//   new GMessages.GProgression(fenetre);
501
  }
502
  private void traiterArguments(String[] args) throws IOException, ClassNotFoundException {
503
    if (args.length==0) return;
504
    FichiersJava.ouvrirCorpusVue(corpus, vue, args[0]);
505
  }
506
}