Statistiques
| Révision :

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

Historique | Voir | Annoter | Télécharger (16,36 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 visuAnalec.Message.*;
12
import visuAnalec.chaines.*;
13
import visuAnalec.donnees.*;
14
import visuAnalec.fichiers.*;
15
import visuAnalec.statistiques.*;
16
import visuAnalec.util.*;
17
import visuAnalec.util.GMessages.*;
18
import visuAnalec.vue.*;
19
import visuAnalec.vue.Vue.*;
20

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

    
41
    // Menu corpus
42
    JMenu corpusMenu = new JMenu("Documents");
43
    corpusMenu.setMnemonic(KeyEvent.VK_D);
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.insertSeparator(corpusMenu.getMenuComponentCount());
173
    corpusMenu.add(new GAction("Quitter") {
174
      public void executer() {
175
        fermerFenetre();
176
      }
177
    });
178

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

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

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

    
283

    
284
    // Menu unités
285
    JMenu unitesMenu = new JMenu("Unités");
286
    unitesMenu.setMnemonic(KeyEvent.VK_U);
287
    menuBar.add(unitesMenu);
288
    unitesMenu.add(new GAction("Gestion des unités") {
289
      public void executer() {
290
        panneauEditeur.initGestionUnites();
291
      }
292
    });
293
    unitesMenu.add(new GAction("Création d'unités typographiques") {
294
      public void executer() {
295
        GMessages.pasImplemente();
296
      }
297
    });
298
    unitesMenu.add(new GAction("Création d'unités de constituance") {
299
      public void executer() {
300
        GMessages.pasImplemente();
301
      }
302
    });
303

    
304
    // Menu relations
305
    JMenu relationsMenu = new JMenu("Relations");
306
    relationsMenu.setMnemonic(KeyEvent.VK_R);
307
    relationsMenu.setMnemonic(KeyEvent.VK_R);
308
    menuBar.add(relationsMenu);
309
    relationsMenu.add(new GAction("Gestion des relations") {
310
      public void executer() {
311
        panneauEditeur.initGestionRelations();
312
      }
313
    });
314
    relationsMenu.add(new GAction("Visualisation d'arborescences") {
315
      public void executer() {
316
        GMessages.pasImplemente();
317
      }
318
    });
319
    relationsMenu.add(new GAction("Saisie d'arborescences") {
320
      public void executer() {
321
        GMessages.pasImplemente();
322
      }
323
    });
324
    relationsMenu.add(new GAction("Création d'arborescences") {
325
      public void executer() {
326
        GMessages.pasImplemente();
327
      }
328
    });
329

    
330
    // Menu schémas
331
    JMenu schemasMenu = new JMenu("Schémas");
332
    schemasMenu.setMnemonic(KeyEvent.VK_H);
333
    menuBar.add(schemasMenu);
334
    schemasMenu.add(new GAction("Gestion des schémas") {
335
      public void executer() {
336
        panneauEditeur.initGestionSchemas();
337
      }
338
    });
339
    schemasMenu.add(new GAction("Création de schémas à partir des annotations") {
340
      public void executer() {
341
        new VisuConversion(getContentPane(), vue, panneauEditeur);
342
      }  
343
    }); 
344
    schemasMenu.add(new GAction("Visualisation de la suite d'occurences") {
345
      public void executer() {
346
        new VisuChaines(getContentPane(), vue, panneauEditeur);
347
      }
348
    });
349
    schemasMenu.add(new GAction("Visualisation des chaines de coréférences") {
350
      public void executer() {
351
        new VisuCoref(getContentPane(), vue, panneauEditeur);
352
      }  
353
    });
354
    schemasMenu.add(new GAction("Statistique Générale") {
355
      public void executer() {
356
        new VisuStatGenerale(getContentPane(), vue, panneauEditeur);
357
      }  
358
    });          
359

    
360
    // Menu règles
361
    JMenu reglesMenu = new JMenu("Règles");
362
    reglesMenu.setMnemonic(KeyEvent.VK_G);
363
    menuBar.add(reglesMenu);
364
    
365
    // Menu Stats
366
    JMenu statsMenu = new JMenu("Statistiques");
367
    statsMenu.setMnemonic(KeyEvent.VK_A);
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
    if (sauvegarde()) System.exit(0);
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 CORPUS_SAVED:
437
          return;
438
      case MODIF_VUE:
439
        switch (((VueEvent) evt).getModif()) {
440
          case VUE_DEFAUT:
441
            nomVue = "";
442
            setTitre();
443
            return;
444
          case NEW_VUE:
445
            nomVue = Fichiers.getNomFichierCourant(Fichiers.TypeFichier.VUE);
446
            setTitre();
447
            return;
448
          case EXTRACTION:
449
            setTitre();
450
            return;
451
          default:
452
            throw new UnsupportedOperationException("Cas "+((VueEvent) evt).getModif()+" oublié dans un switch");
453
        }
454
      case MODIF_TEXTE:
455
      case MODIF_STRUCTURE:
456
      case MODIF_ELEMENT:
457
        setTitre();
458
        return;
459
      default:
460
        throw new UnsupportedOperationException("Cas "+evt.getType()+" oublié dans un switch");
461
    }
462
  }
463
  private void setTitre() {
464
    String titre = "Analec 1.4";
465
    if (!nomCorpus.isEmpty()) {
466
      titre += " : "+nomCorpus;
467
      if (corpus.isModifie()) titre += "*";
468
      if (nomVue.isEmpty()) {
469
        if (vue.isModifiee()) titre += " - vue modifiée*";
470
        else titre += " - vue par défaut";
471
      } else {
472
        titre += " - vue : "+nomVue;
473
        if (vue.isModifiee()) titre += "*";
474
      }
475
    }
476
    setTitle(titre);
477
  }
478
  public static void main(String[] args) {
479
    VisuMain.args = args;
480
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
481
      public void run() {
482
        try {
483
          // Fenêtre
484
          lancerVisuAnalec();
485
        } catch (Throwable ex) {
486
          GMessages.erreurFatale(ex);
487
        }
488
      }
489
    });
490
  }
491
//    try {
492
//      // Fenêtre
493
//      lancerVisuAnalec(args);
494
//    } catch (Throwable ex) {
495
//      GMessages.erreurFatale(ex);
496
//    }
497
//  }
498
  public static void lancerVisuAnalec() throws IOException, ClassNotFoundException {
499
    // Fenêtre
500
    VisuMain fenetre = new VisuMain();
501
    fenetre.setTitre();
502
    Rectangle rmax = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
503
    fenetre.setLocation(50, 50);
504
    fenetre.setSize(rmax.width-100, rmax.height-100);
505
    fenetre.setVisible(true);
506
    fenetre.panneauEditeur.agencerPanneaux();
507
    fenetre.traiterArguments(args);
508
//    System.out.println(fenetre.corpus.getStructure().toString());
509
//   new GMessages.GProgression(fenetre);
510
  }
511
  private void traiterArguments(String[] args) throws IOException, ClassNotFoundException {
512
    if (args.length==0) return;
513
    FichiersJava.ouvrirCorpusVue(corpus, vue, args[0]);
514
  }
515
}