Source code: jaxe/elements/JEItem.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.elements;
14
15 import jaxe.JaxeDocument;
16 import jaxe.JaxeElement;
17
18 import java.util.ArrayList;
19 import java.util.Hashtable;
20 import java.awt.*;
21 import java.awt.image.*;
22 import java.awt.event.MouseAdapter;
23 import java.awt.event.MouseEvent;
24 import javax.swing.*;
25 import javax.swing.text.Position;
26 import javax.swing.text.BadLocationException;
27 import javax.swing.text.Style;
28 import javax.swing.text.StyleConstants;
29
30 import org.w3c.dom.*;
31
32 /**
33 * Elément d'une liste, affiché avec des puces ou des numéros. Ce type d'élément de liste,
34 * inséré dans le texte, peut avoir n'importe quelle longueur, à la différence des éléments d'un JEListe.
35 * Type d'élément Jaxe: 'item'
36 */
37 public class JEItem extends JaxeElement {
38
39 static String newline = "\n";
40 String fichierPastille1 = "images_Jaxe/pastille1.gif";
41 String fichierPastille2 = "images_Jaxe/pastille2.gif";
42 boolean selectionne = false;
43 Image imagePastille1 = null;
44 Image imagePastille2 = null;
45 Image imagePastille1sel = null;
46 Image imagePastille2sel = null;
47 ImageIcon iconePastille1 = null;
48 ImageIcon iconePastille2 = null;
49 int typeListe = 0;
50 JLabel label = null;
51 boolean mettreajour = false;
52
53 public JEItem(JaxeDocument doc) {
54 this.doc = doc;
55 }
56
57 public void init(Position pos, Node noeud) {
58 Position newpos;
59
60 JaxeElement jeparent = null;
61 if (getParent() != null)
62 jeparent = doc.getElementForNode(getParent().noeud);
63 if (jeparent instanceof JEListe)
64 typeListe = ((JEListe)jeparent).typeListe;
65 if (typeListe == JEListe.NUMEROS) {
66 int lp = posDansListe();
67 label = new JLabel(lp+".");
68 label.setOpaque(true);
69 label.setBackground(Color.white);
70 newpos = insertComponent(pos, label);
71 } else {
72 if (doc.cfg != null) {
73 Element defbalise = doc.cfg.getBaliseDef(noeud.getNodeName());
74
75 if (defbalise != null)
76 fichierPastille1 = doc.cfg.getParamFromDefinition(defbalise, "image1", fichierPastille1);
77 }
78
79 iconePastille1 = new ImageIcon(fichierPastille1);
80 newpos = insertIcon(pos, iconePastille1);
81 //label = new JLabel(iconePastille1);
82 //label.addMouseListener(new MyMouseListener(this, doc.jframe));
83 }
84
85 creerEnfants(newpos);
86
87 //doc.insertString(newpos.getOffset(), newline, null);
88 if (doc.cfg != null) {
89 Element defbalise = doc.cfg.getBaliseDef(noeud.getNodeName());
90
91 if (defbalise != null)
92 fichierPastille2 = doc.cfg.getParamFromDefinition(defbalise, "image2", fichierPastille2);
93 }
94
95 iconePastille2 = new ImageIcon(fichierPastille2);
96 newpos = insertIcon(newpos, iconePastille2);
97
98 if (mettreajour) {
99 majListe(false);
100 mettreajour = false;
101 }
102 }
103
104 public int posDansListe() {
105 Element parel = (Element)getParent().noeud;
106 NodeList lchildren = parel.getChildNodes();
107 String itemTag = noeud.getNodeName();
108 int p = 1;
109 for (int i=0; i<lchildren.getLength(); i++) {
110 if (itemTag.equals(lchildren.item(i).getNodeName())) {
111 if (lchildren.item(i) == noeud)
112 return(p);
113 p++;
114 }
115 }
116 System.err.println("Erreur: Impossible de retrouver le numéro dans la liste");
117 return(0);
118 }
119
120 public void majNombre(int p) {
121 if (p == 0)
122 p = posDansListe();
123 label.setText(p + ".");
124 }
125
126 public void majListe(boolean pourEffacer) {
127 if (typeListe == JEListe.NUMEROS) {
128 Element parel = (Element)getParent().noeud;
129 NodeList lchildren = parel.getChildNodes();
130 String itemTag = noeud.getNodeName();
131 int p = 1;
132 for (Node n=parel.getFirstChild(); n != null; n=n.getNextSibling()) {
133 if (itemTag.equals(n.getNodeName()) && (!pourEffacer || n != noeud)) {
134 JEItem je = (JEItem)doc.getElementForNode(n);
135 je.majNombre(p);
136 p++;
137 }
138 }
139 }
140 }
141
142 public void effacer() {
143 super.effacer();
144 majListe(true);
145 }
146
147 public Element nouvelElement(Element defbalise) {
148 String nombalise = defbalise.getAttribute("nom");
149 Element newel = nouvelElementDOM(doc, nombalise);
150
151 mettreajour = true;
152 return(newel);
153 }
154
155 public Position insPosition() {
156 return(fin);
157 }
158
159 public void selection(boolean select) {
160 if (!selectionne && select) {
161 if (iconePastille1 != null && imagePastille1 == null)
162 imagePastille1 = iconePastille1.getImage();
163 if (imagePastille2 == null)
164 imagePastille2 = iconePastille2.getImage();
165 if (imagePastille1sel == null)
166 creerImagesSel();
167 if (iconePastille1 != null)
168 iconePastille1.setImage(imagePastille1sel);
169 else
170 label.setBackground(Color.lightGray);
171 iconePastille2.setImage(imagePastille2sel);
172 }
173 if (selectionne && !select) {
174 if (iconePastille1 != null)
175 iconePastille1.setImage(imagePastille1);
176 else
177 label.setBackground(Color.white);
178 iconePastille2.setImage(imagePastille2);
179 }
180 selectionne = select;
181 doc.textPane.repaint();
182 super.selection(select);
183 }
184
185 protected void creerImagesSel() {
186 ImageFilter filtre = new FiltreGris();
187 if (imagePastille1 != null) {
188 ImageProducer producteur1 = new FilteredImageSource(imagePastille1.getSource(), filtre);
189 imagePastille1sel = Toolkit.getDefaultToolkit().createImage(producteur1);
190 }
191 ImageProducer producteur2 = new FilteredImageSource(imagePastille2.getSource(), filtre);
192 imagePastille2sel = Toolkit.getDefaultToolkit().createImage(producteur2);
193 }
194
195 class FiltreGris extends RGBImageFilter {
196 private int gris = 0xFFAFAFAF;
197 public FiltreGris() {
198 canFilterIndexColorModel = true;
199 }
200 public int filterRGB(int x, int y, int rgb) {
201 return(rgb & gris);
202 }
203 }
204
205 /*
206 public void afficherDialogue(JFrame jframe) {
207 Element el = (Element)noeud;
208
209 Element defbalise = doc.cfg.getBaliseDef(el.getTagName());
210 ArrayList latt = doc.cfg.listeAttributs(defbalise);
211 if (latt != null && latt.size() > 0) {
212 DialogueAttributs dlg = new DialogueAttributs(doc.jframe,
213 "string: " + el.getTagName(), defbalise, el);
214 if (!dlg.afficher())
215 return;
216 dlg.enregistrerReponses();
217 }
218 }
219
220 class MyMouseListener extends MouseAdapter {
221 JEItem jei;
222 JFrame jframe;
223 public MyMouseListener(JEItem obj, JFrame jframe) {
224 super();
225 jei = obj;
226 this.jframe = jframe;
227 }
228 public void mouseClicked(MouseEvent e) {
229 jei.afficherDialogue(jframe);
230 }
231 }
232 */
233 }