Source code: jaxe/Jaxe.java
1 /*
2 Jaxe - Editeur XML en Java
3
4 Copyright (C) 2002 Observatoire de Paris-Meudon
5
6 Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier conformément aux dispositions de la Licence Publique Générale GNU, telle que publiée par la Free Software Foundation ; version 2 de la licence, ou encore (à votre choix) toute version ultérieure.
7
8 Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER. Pour plus de détail, voir la Licence Publique Générale GNU .
9
10 Vous devez avoir reçu un exemplaire de la Licence Publique Générale GNU en même temps que ce programme ; si ce n'est pas le cas, écrivez à la Free Software Foundation Inc., 675 Mass Ave, Cambridge, MA 02139, Etats-Unis.
11 */
12
13 package jaxe;
14
15 import java.io.File;
16 import java.util.*;
17 import javax.swing.*;
18
19 import jaxe.macjaxe.MacJaxe;
20 import jaxe.macjaxe.MacJaxeFactory;
21
22 /**
23 * Classe de départ de Jaxe, avec la gestion des évènements de l'application
24 */
25 public class Jaxe {
26
27 // tous les objets Jaxe
28 public static Vector allFrames = new Vector();
29
30 //static String newline = System.getProperty("line.separator");
31 static String newline = "\n";
32
33 static String nomFichierCfg; // par défaut pour un nouveau document
34 static MacJaxe mac = null;
35
36
37 public Jaxe(String nomFichierCfg) {
38 this.nomFichierCfg = nomFichierCfg;
39
40 Preferences.chargerPref();
41
42 if (mac == null) {
43 try {
44 mac = MacJaxeFactory.getInstance().buildMacJaxe();
45 } catch(Exception e) {
46 // TODO better logging?
47 e.printStackTrace();
48 }
49 }
50
51 nouveau(null);
52 }
53
54 // dans les 3 méthodes suivantes, jframe indique la fenêtre active
55 // jframe est facultatif, et peut être null
56 // si jframe est spécifié, elle peut être utilisée au lieu d'ouvrir une nouvelle fenêtre
57
58 public static synchronized void nouveau(JaxeFrame jframe) {
59 if (jframe == null || (jframe.doc.modif || jframe.doc.fsave != null)) {
60 jframe = new JaxeFrame();
61 allFrames.add(jframe);
62 }
63 try {
64 jframe.initNew(nomFichierCfg);
65 } catch (Exception ex) {
66 System.err.println("Java bug 4353673");
67 ex.printStackTrace();
68 //JOptionPane.showMessageDialog(jframe, "Java bug 4353673",
69 // "fatal Java bug", JOptionPane.ERROR_MESSAGE);
70
71 // deuxième chance !
72 jframe.fermer(true);
73 jframe = new JaxeFrame();
74 allFrames.add(jframe);
75 jframe.initNew(nomFichierCfg);
76 }
77 }
78
79 public static synchronized void ouvrir(File f, JaxeFrame jframe) {
80 if (f == null)
81 return;
82 for (int i=0; i<allFrames.size(); i++) {
83 JaxeFrame ji = (JaxeFrame)allFrames.get(i);
84 if (f.equals(ji.doc.fsave)) {
85 ji.toFront();
86 return;
87 }
88 }
89 if (jframe == null)
90 jframe = premiereFrame();
91 if (jframe == null || (jframe.doc.modif || jframe.doc.fsave != null)) {
92 jframe = new JaxeFrame();
93 allFrames.add(jframe);
94 }
95 jframe.ouvrir(f);
96 }
97
98 public static void ouvrirConf(File f, JaxeFrame jframe) {
99 nomFichierCfg = f.getPath();
100 nouveau(jframe);
101 }
102
103 public static void quitter() {
104 boolean vafermer = true;
105 for (int i=allFrames.size()-1; i>=0; i--) { // doClose modifie allFrames
106 JaxeFrame ji = (JaxeFrame)allFrames.get(i);
107 if (!ji.fermer(true))
108 vafermer = false;
109 }
110 if (vafermer)
111 System.exit(0);
112 }
113
114 public static void aPropos() {
115 JaxeFrame jframe = premiereFrame();
116 if (jframe != null)
117 jframe.getJaxeMenuBar().doAbout();
118 else
119 System.err.println("pas de fenêtre, pas de dialogue !");
120 }
121
122 public static void preferences() {
123 JaxeFrame jframe = premiereFrame();
124 if (jframe != null)
125 jframe.getJaxeMenuBar().doPreferences();
126 else
127 System.err.println("pas de fenêtre, pas de dialogue !");
128 }
129
130 public static JaxeFrame premiereFrame() {
131 if (allFrames.size() == 0)
132 return(null);
133 return((JaxeFrame)allFrames.get(0));
134 }
135
136 public static void main(String args[]) {
137 if (System.getProperty("jaxe.config") != null)
138 new Jaxe(System.getProperty("jaxe.config"));
139 else if (args.length > 0 && args[0].endsWith("cfg.xml"))
140 new Jaxe(args[0]);
141 else {
142 File dir = new File("config");
143 if (!dir.exists()) {
144 JOptionPane.showMessageDialog(null, JaxeResourceBundle.getRB().getString("config.PasTrouve"),
145 JaxeResourceBundle.getRB().getString("config.ErreurLancement"), JOptionPane.ERROR_MESSAGE);
146 System.exit(1);
147 }
148 File[] liste = dir.listFiles();
149 for (int i=0; i<liste.length; i++)
150 if (liste[i].getName().endsWith("cfg.xml")) {
151 Jaxe moi = new Jaxe(liste[i].getPath());
152 if (args.length > 0 && args[0].endsWith(".xml"))
153 moi.ouvrir(new File(args[0]), null);
154 return;
155 }
156 JOptionPane.showMessageDialog(null, JaxeResourceBundle.getRB().getString("config.AucunFichier"),
157 JaxeResourceBundle.getRB().getString("config.ErreurLancement"), JOptionPane.ERROR_MESSAGE);
158 System.exit(1);
159 }
160 }
161
162 }