KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > enhydra > jawe > xml > panels > XMLListPanel


1 /* XMLListPanel.java
2  *
3  * Authors:
4  * Stefanovic Nenad chupo@iis.ns.ac.yu
5  * Bojanic Sasa sasaboy@neobee.net
6  * Puskas Vladimir vpuskas@eunet.yu
7  * Pilipovic Goran zboniek@uns.ac.yu
8  *
9  */

10
11
12 package org.enhydra.jawe.xml.panels;
13
14 import org.enhydra.jawe.xml.*;
15
16 import java.util.*;
17 import javax.swing.*;
18 import javax.swing.event.*;
19 import java.awt.*;
20 import java.awt.event.*;
21
22 /**
23  * Creates a list panel.
24  */

25 public class XMLListPanel extends XMLPanel {
26
27    protected static Dimension minimalDimension=new Dimension(250,60);
28    protected static Dimension listDimension=new Dimension(250,100);
29
30    /**
31     * Object which we are replacing from one place to another within
32     * the list by draging it.
33     */

34    private Object JavaDoc replacingObject;
35    /**
36     * Index of the object which we are replacing from one place to another
37     * within the list by draging it.
38     */

39    private int startReplaceIndex;
40    /**
41     * The new index of the object which we are replacing from one place
42     * to another within the list by draging it.
43     */

44    private int endReplaceIndex;
45    /** Indicates if object is beeing draged. */
46    private boolean dragging=false;
47    /**
48     * Indicates if the code for changing object position within the list
49     * is executed.
50     */

51    private boolean changing=false;
52
53    public XMLListPanel (XMLCollection myOwner,String JavaDoc title,boolean hasBorder,
54                         final boolean enableEditing,boolean minDimension) {
55
56       super(myOwner,2,title,XMLPanel.BOX_LAYOUT,false,hasBorder);
57
58       JScrollPane scrollParam=new JScrollPane();
59       scrollParam.setAlignmentX(Component.LEFT_ALIGNMENT);
60       //scrollParam.setAlignmentY(Component.TOP_ALIGNMENT);
61

62       final DefaultListModel listModel=new DefaultListModel();
63
64       // fills list
65
Iterator it=myOwner.toCollection().iterator();
66       while (it.hasNext()) {
67          XMLElement elem=(XMLElement)it.next();
68          listModel.addElement(elem);
69       }
70
71       final JList allParam=new JList(listModel);
72       allParam.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
73
74       allParam.setAlignmentX(Component.LEFT_ALIGNMENT);
75       allParam.setAlignmentY(Component.TOP_ALIGNMENT);
76
77       // mouse listener for editing on double-click and dragging list items
78
allParam.addMouseListener(new MouseAdapter() {
79                public void mouseClicked (MouseEvent me) {
80                   // implement some action only if editing is enabled
81
if (enableEditing && me.getClickCount()>1) {
82                      editElementDialog();
83                   }
84                }
85
86                /** Marks the object which place within the list will be changed.*/
87                public void mousePressed (MouseEvent me) {
88                   if (changing) {
89                      changing=false;
90                      return;
91                   }
92                   if (getOwner().isReadOnly()) return;
93                   dragging=true;
94                   JList l=getList();
95                   replacingObject=null;
96                   startReplaceIndex=-1;
97                   try {
98                      replacingObject=l.getSelectedValue();
99                      startReplaceIndex=l.getSelectedIndex();
100                   } catch (Exception JavaDoc ex) {}
101                }
102
103                /** Just indicates that dragging is over.*/
104                public void mouseReleased (MouseEvent me) {
105                   dragging=false;
106                }
107
108             });
109
110       /** Changes position of object within the list.*/
111       if (!myOwner.isReadOnly()) {
112          allParam.addListSelectionListener(new ListSelectionListener() {
113                   public void valueChanged (ListSelectionEvent lse) {
114                      if (dragging && !changing) {
115                         changing=true;
116                         JList l=(JList)lse.getSource();
117                         endReplaceIndex=-1;
118                         try {
119                            endReplaceIndex=l.getSelectedIndex();
120                         } catch (Exception JavaDoc ex) {}
121
122                         if (replacingObject==null || startReplaceIndex==-1 || endReplaceIndex==-1 ||
123                             startReplaceIndex==endReplaceIndex) {
124                            changing=false;
125                            return;
126                         }
127
128                         DefaultListModel listModel=(DefaultListModel)l.getModel();
129                         listModel.remove(startReplaceIndex);
130                         listModel.add(endReplaceIndex,replacingObject);
131                         ((XMLCollection)getOwner()).remove(replacingObject);
132                         ((ArrayList)((XMLCollection)getOwner()).
133                             toCollection()).add(endReplaceIndex,replacingObject);
134                         try {
135                            l.setSelectedIndex(endReplaceIndex);
136                         } catch (Exception JavaDoc ex) {}
137
138                         if (startReplaceIndex!=endReplaceIndex) {
139                            ((XMLElementDialog)getDialog()).notifyListeners(getOwner());
140                         }
141
142                         startReplaceIndex=endReplaceIndex;
143                         changing=false;
144                      }
145                   }
146                });
147          allParam.setToolTipText(
148             XMLUtil.getLanguageDependentString("MessageDragItemToChangeItsPosition"));
149       }
150
151       if (enableEditing) {
152          allParam.getInputMap(JComponent.WHEN_FOCUSED).
153             put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0,false),"edit");
154          allParam.getActionMap().put("edit",new AbstractAction() {
155                   public void actionPerformed(ActionEvent e) {
156                      editElementDialog();
157                   }
158                });
159
160          allParam.getInputMap(JComponent.WHEN_FOCUSED).
161             put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0,false),"delete");
162          allParam.getActionMap().put("delete",new AbstractAction() {
163                   public void actionPerformed(ActionEvent e) {
164                      removeSelectedElement();
165                   }
166                });
167
168       }
169
170       scrollParam.setViewportView(allParam);
171       if (!minDimension) {
172          scrollParam.setPreferredSize(new Dimension(listDimension));
173       } else {
174          scrollParam.setPreferredSize(new Dimension(minimalDimension));
175       }
176
177       add(scrollParam);
178
179       JPanel p=new JPanel();
180       p.setLayout(new BoxLayout(p,BoxLayout.Y_AXIS));
181
182       JButton buttonUp=new JButton();
183       java.net.URL JavaDoc u = XMLUtil.getResource("ArrowUpImage");
184       if (u!=null) {
185          buttonUp.setIcon(new ImageIcon(u));
186       }
187       buttonUp.setEnabled(!myOwner.isReadOnly());
188       buttonUp.addActionListener(new ActionListener() {
189                public void actionPerformed(ActionEvent e) {
190                   moveItem(0);
191                }
192             });
193       buttonUp.setPreferredSize(new Dimension(25,25));
194       JButton buttonDown=new JButton();
195       u = XMLUtil.getResource("ArrowDownImage");
196       if (u!=null) {
197          buttonDown.setIcon(new ImageIcon(u));
198       }
199       buttonDown.setEnabled(!myOwner.isReadOnly());
200       buttonDown.addActionListener(new ActionListener() {
201                public void actionPerformed(ActionEvent e) {
202                   moveItem(1);
203                }
204             });
205       buttonDown.setPreferredSize(new Dimension(25,25));
206       p.add(buttonUp);
207       p.add(Box.createVerticalGlue());
208       p.add(buttonDown);
209       add(Box.createRigidArea(new Dimension(5,0)));
210       add(p);
211    }
212
213    public boolean isItemChangingPosition () {
214       return (changing || dragging);
215    }
216
217    public JList getList () {
218       JScrollPane jsp=(JScrollPane)getComponent(0);
219       JViewport jvp=(JViewport)jsp.getComponent(0);
220       JList l=(JList)jvp.getComponent(0);
221       return l;
222    }
223
224    private void editElementDialog () {
225       XMLElement editElement=null;
226       try {
227          editElement=(XMLElement)getList().getSelectedValue();
228       } catch (Exception JavaDoc ex) {}
229
230       if (editElement!=null) {
231          XMLElementDialog de=new XMLElementDialog((JDialog)getDialog(),
232                                                   editElement.toLabel()+" '"+editElement.toString()+"' - "+
233                                                      XMLUtil.getLanguageDependentString("EditingKey"));
234          de.editXMLElement(editElement.getPanel(),true,false);
235          if (!de.isCanceled()) {
236             ((XMLCollection)getOwner()).onElementModified(editElement);
237             paintAll(getGraphics());
238          }
239       } else {
240          JOptionPane.showMessageDialog(getDialog(),
241                                        XMLUtil.getLanguageDependentString("WarningEmptySelectionToEditOrDelete"),
242                                        XMLUtil.getLanguageDependentString("Title"),
243                                        JOptionPane.WARNING_MESSAGE);
244       }
245       getList().requestFocus();
246    }
247
248    private void removeSelectedElement () {
249       JList l=getList();
250       Object JavaDoc obj=null;
251       int ind=0;
252       try {
253          obj=l.getSelectedValue();
254          ind=l.getSelectedIndex();
255       } catch (Exception JavaDoc ex) {}
256
257       if (obj!=null) {
258          if (((XMLCollection)getOwner()).canRemoveElement((XMLElement)obj)) {
259             int yn=JOptionPane.showConfirmDialog(getDialog(),
260                                                  XMLUtil.getLanguageDependentString(
261                                                     "MessageDoYouReallyWantToRemoveSelectedItem"),
262                                                     ((XMLElement)obj).toLabel()+" - "+
263                                                     XMLUtil.getLanguageDependentString("DeletingKey"),
264                                                  JOptionPane.YES_NO_OPTION);
265             if (yn==JOptionPane.YES_OPTION) {
266                DefaultListModel listModel=(DefaultListModel)l.getModel();
267                listModel.removeElement(obj);
268                ((XMLCollection)getOwner()).remove(obj);
269                ((XMLCollection)getOwner()).onElementRemoved((XMLElement)obj);
270             } else {
271                l.requestFocus();
272                return;
273             }
274          } else {
275             String JavaDoc message="";
276             if (obj instanceof XMLComplexElement) {
277                message=XMLUtil.getLanguageDependentString(((XMLCollection)getOwner()).
278                                                              getInUseMessageName((XMLComplexElement)obj));
279             }
280             JOptionPane.showMessageDialog(getDialog(),
281                                           message,XMLUtil.getLanguageDependentString("Title"),
282                                           JOptionPane.ERROR_MESSAGE);
283          }
284       } else {
285          JOptionPane.showMessageDialog(getDialog(),
286                                        XMLUtil.getLanguageDependentString("WarningEmptySelectionToEditOrDelete"),
287                                        XMLUtil.getLanguageDependentString("Title"),
288                                        JOptionPane.WARNING_MESSAGE);
289       }
290       try {
291          if (ind==0) {
292             ind++;
293          }
294          l.setSelectedIndex(ind-1);
295       } catch (Exception JavaDoc ex) {}
296
297       l.requestFocus();
298    }
299
300    private void moveItem (int upOrDown) {
301       changing=true;
302       JList l=getList();
303       Object JavaDoc rObject=null;
304       int sri=-1;
305       try {
306          rObject=l.getSelectedValue();
307          sri=l.getSelectedIndex();
308       } catch (Exception JavaDoc ex) {}
309       if (rObject==null || sri==-1) {
310          changing=false;
311          return;
312       }
313       int eri=sri;
314       if (upOrDown==0) {
315          eri--;
316       } else {
317          eri++;
318       }
319       if (eri<0) {
320          eri=0;
321       }
322       if (eri>((XMLCollection)getOwner()).size()-1) {
323          eri=((XMLCollection)getOwner()).size()-1;
324       }
325
326       DefaultListModel listModel=(DefaultListModel)l.getModel();
327       listModel.remove(sri);
328       listModel.add(eri,rObject);
329       ((XMLCollection)getOwner()).remove(rObject);
330       ((ArrayList)((XMLCollection)getOwner()).toCollection()).add(eri,rObject);
331       try {
332          l.setSelectedIndex(eri);
333       } catch (Exception JavaDoc ex) {}
334
335       if (sri!=eri) {
336          ((XMLElementDialog)getDialog()).notifyListeners(getOwner());
337       }
338
339       changing=false;
340    }
341
342    protected void setChanging () {
343       changing=true;
344    }
345
346 }
347
Popular Tags