Source code: com/memoire/dja/DjaPaletteBracket.java
1 /**
2 * @modification $Date: 2001/12/03 16:28:08 $
3 * @statut unstable
4 * @file DjaPaletteBracket.java
5 * @version 0.36
6 * @author Guillaume Desnoix
7 * @email guillaume@desnoix.com
8 * @license GNU General Public License 2 (GPL2)
9 * @copyright 1998-2001 Guillaume Desnoix
10 */
11
12 package com.memoire.dja;
13
14 import com.memoire.fu.*;
15 import com.memoire.dnd.*;
16 import com.memoire.bu.*;
17 import com.memoire.dja.*;
18 import com.memoire.mst.*;
19
20
21 import java.awt.*;
22 import java.awt.event.*;
23 import java.util.*;
24 import javax.swing.*;
25 import javax.swing.event.*;
26 import javax.swing.border.*;
27
28 public class DjaPaletteBracket
29 extends BuPanel
30 implements DjaOptions, ListSelectionListener, ActionListener
31 {
32 JComboBox cbt,cet;
33 JList lbt,let;
34 ActionListener al_;
35
36 class XCR
37 implements ListCellRenderer
38 {
39 ListCellRenderer r_;
40 int o_;
41
42 public XCR(ListCellRenderer _r, int _o)
43 {
44 r_=_r;
45 o_=_o;
46 }
47
48 public Component getListCellRendererComponent(
49 JList list,
50 Object value,
51 int index,
52 boolean isSelected,
53 boolean cellHasFocus)
54 {
55 Component r=r_.getListCellRendererComponent
56 (list,value,index,isSelected,cellHasFocus);
57
58 if(value instanceof Integer)
59 {
60 int i=((Integer)value).intValue();
61 ((JLabel)r).setIcon(new BracketIcon(i,o_,null));
62 ((JLabel)r).setText(null); // ""+i);
63 }
64
65 return r;
66 }
67 }
68
69 class XLM implements ListModel
70 {
71 DjaVector l=new DjaVector(2);
72 public void addListDataListener(ListDataListener _l) { l.addElement(_l); }
73 public void removeListDataListener(ListDataListener _l) { l.removeElement(_l); }
74 public Object getElementAt(int index) { return new Integer(index); }
75 public int getSize() { return DjaLink.NB_TYPE; }
76 }
77
78 public DjaPaletteBracket(ActionListener _al)
79 {
80 super();
81
82 al_=_al;
83
84 BuGridLayout layout_=new BuGridLayout(2,2,2);
85 layout_.setCfilled(false);
86 setLayout(layout_);
87 // setLayout(new BuHorizontalLayout(2,false,true));
88 setBorder(new EmptyBorder(2,2,2,2));
89
90 ListModel mt=new XLM();
91
92 lbt=new JList();
93 lbt.setModel(mt);
94 lbt.setCellRenderer(new XCR(lbt.getCellRenderer(),EAST));
95 lbt.setRequestFocusEnabled(false);
96 lbt.setSelectedIndex(0);
97 lbt.addListSelectionListener(this);
98
99 JScrollPane sbt=new JScrollPane(lbt);
100 sbt.setPreferredSize(new Dimension(0,150));
101
102 let=new JList();
103 let.setModel(mt);
104 let.setCellRenderer(new XCR(let.getCellRenderer(),WEST));
105 let.setRequestFocusEnabled(false);
106 let.setSelectedIndex(5);
107 let.addListSelectionListener(this);
108
109 JScrollPane set=new JScrollPane(let);
110 set.setPreferredSize(new Dimension(0,150));
111
112 cbt=new JComboBox();
113 for(int i=0; i<DjaLink.NB_TYPE; i++)
114 cbt.addItem(new Integer(i));
115 cbt.setRenderer(new XCR(cbt.getRenderer(),EAST));
116 cbt.setRequestFocusEnabled(false);
117 cbt.setMaximumRowCount(5);
118 cbt.addActionListener(this);
119
120 cet=new JComboBox();
121 for(int i=0; i<DjaLink.NB_TYPE; i++)
122 cet.addItem(new Integer(i));
123 cet.setRenderer(new XCR(cet.getRenderer(),WEST));
124 cet.setRequestFocusEnabled(false);
125 cet.setMaximumRowCount(5);
126 cet.addActionListener(this);
127
128 BuPanel begint=new BuPanel();
129 begint.setLayout(new BuVerticalLayout(2,true,false));
130
131 for(int i=0; i<DjaLink.NB_TYPE; i++)
132 {
133 Icon icon =new BracketIcon(i,EAST,lbt);
134 BuButton button=new BuButton();
135
136 button.setIcon(icon);
137 button.setRolloverIcon(icon);
138 button.setMargin(new Insets(1,1,1,1));
139 button.setRequestFocusEnabled(false);
140 button.setToolTipText(""+i);
141 button.setActionCommand("DJA_BEGIN_TYPE("+i+")");
142
143 begint.add(button);
144 button.addActionListener(_al);
145 }
146
147 BuPanel endt=new BuPanel();
148 endt.setLayout(new BuVerticalLayout(2,true,false));
149
150 for(int i=0; i<DjaLink.NB_TYPE; i++)
151 {
152 Icon icon =new BracketIcon(i,WEST,let);
153 BuButton button=new BuButton();
154
155 button.setIcon(icon);
156 button.setRolloverIcon(icon);
157 button.setMargin(new Insets(1,1,1,1));
158 button.setRequestFocusEnabled(false);
159 button.setToolTipText(""+i);
160 button.setActionCommand("DJA_END_TYPE("+i+")");
161
162 endt.add(button);
163 button.addActionListener(_al);
164 }
165
166 BuPanel begino=new BuPanel();
167 begino.setLayout(new BuGridLayout(2,2,2));
168
169 for(int i=0; i<4; i++)
170 {
171 Icon icon =new BracketIcon(6,i,lbt);
172 BuButton button=new BuButton();
173
174 button.setIcon(icon);
175 button.setRolloverIcon(icon);
176 button.setMargin(new Insets(1,1,1,1));
177 button.setRequestFocusEnabled(false);
178 button.setToolTipText(""+i);
179 button.setActionCommand("DJA_BEGIN_ORIENTATION("+i+")");
180
181 begino.add(button);
182 button.addActionListener(_al);
183 }
184
185 BuPanel endo=new BuPanel();
186 endo.setLayout(new BuGridLayout(2,2,2));
187
188 for(int i=0; i<4; i++)
189 {
190 Icon icon =new BracketIcon(6,i,let);
191 BuButton button=new BuButton();
192
193 button.setIcon(icon);
194 button.setRolloverIcon(icon);
195 button.setMargin(new Insets(1,1,1,1));
196 button.setRequestFocusEnabled(false);
197 button.setToolTipText(""+i);
198 button.setActionCommand("DJA_END_ORIENTATION("+i+")");
199
200 endo.add(button);
201 button.addActionListener(_al);
202 }
203
204 add(sbt);
205 add(set);
206 // add(cbt);
207 // add(cet);
208 // add(begint);
209 // add(endt);
210 add(begino);
211 add(endo);
212 }
213
214 public void valueChanged(ListSelectionEvent _evt)
215 {
216 if(_evt.getValueIsAdjusting()) return;
217
218 Object source=_evt.getSource();
219
220 if(source==lbt)
221 al_.actionPerformed(new ActionEvent
222 (this,ActionEvent.ACTION_PERFORMED,
223 "DJA_BEGIN_TYPE("+lbt.getSelectedIndex()+")"));
224 if(source==let)
225 al_.actionPerformed(new ActionEvent
226 (this,ActionEvent.ACTION_PERFORMED,
227 "DJA_END_TYPE("+let.getSelectedIndex()+")"));
228
229 repaint();
230 }
231
232 public void actionPerformed(ActionEvent _evt)
233 {
234 Object source=_evt.getSource();
235 System.out.println("PALBRK:"+_evt);
236
237 if(source==cbt)
238 al_.actionPerformed(new ActionEvent
239 (this,ActionEvent.ACTION_PERFORMED,
240 "DJA_BEGIN_TYPE("+cbt.getSelectedIndex()+")"));
241 if(source==cet)
242 al_.actionPerformed(new ActionEvent
243 (this,ActionEvent.ACTION_PERFORMED,
244 "DJA_END_TYPE("+cet.getSelectedIndex()+")"));
245 }
246
247 private class BracketIcon implements Icon
248 {
249 private int t_;
250 private int o_;
251 private JList l_;
252
253 public BracketIcon(int _t, int _o, JList _l)
254 {
255 t_=_t;
256 o_=_o;
257 l_=_l;
258 }
259
260 public int getIconWidth () { return 16; }
261 public int getIconHeight() { return 16; }
262
263 public void paintIcon(Component _c, Graphics _g, int x, int y)
264 {
265 x+=2;
266 y+=2;
267
268 int t=t_;
269
270 if(l_!=null)
271 t=l_.getSelectedIndex();
272
273 Color fg=Color.black;
274 Color bg=new Color(224,224,255);
275
276 switch(o_)
277 {
278 case EAST:
279 DjaLink.drawBracket(_g,t,o_,x,y,x+10,y+10,
280 fg,bg,1);
281 break;
282 case WEST:
283 DjaLink.drawBracket(_g,t,o_,x+10,y,x,y+10,
284 fg,bg,1);
285 break;
286 case NORTH:
287 DjaLink.drawBracket(_g,t,o_,x,y+10,x+10,y,
288 fg,bg,1);
289 break;
290 case SOUTH:
291 DjaLink.drawBracket(_g,t,o_,x,y,x+10,y+10,
292 fg,bg,1);
293 break;
294 }
295
296 if(l_!=null)
297 {
298 _g.setColor(Color.red);
299 switch(o_)
300 {
301 case EAST : _g.fillRect(x-1 ,y-1+5 ,3,3); break;
302 case WEST : _g.fillRect(x-1+10,y-1+5 ,3,3); break;
303 case NORTH: _g.fillRect(x-1+5 ,y-1+10,3,3); break;
304 case SOUTH: _g.fillRect(x-1+5 ,y-1 ,3,3); break;
305 }
306 }
307 }
308 }
309 }