1 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 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 34 private Object replacingObject; 35 39 private int startReplaceIndex; 40 44 private int endReplaceIndex; 45 46 private boolean dragging=false; 47 51 private boolean changing=false; 52 53 public XMLListPanel (XMLCollection myOwner,String 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 62 final DefaultListModel listModel=new DefaultListModel(); 63 64 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 allParam.addMouseListener(new MouseAdapter() { 79 public void mouseClicked (MouseEvent me) { 80 if (enableEditing && me.getClickCount()>1) { 82 editElementDialog(); 83 } 84 } 85 86 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 ex) {} 101 } 102 103 104 public void mouseReleased (MouseEvent me) { 105 dragging=false; 106 } 107 108 }); 109 110 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 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 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 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 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 obj=null; 251 int ind=0; 252 try { 253 obj=l.getSelectedValue(); 254 ind=l.getSelectedIndex(); 255 } catch (Exception 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 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 ex) {} 296 297 l.requestFocus(); 298 } 299 300 private void moveItem (int upOrDown) { 301 changing=true; 302 JList l=getList(); 303 Object rObject=null; 304 int sri=-1; 305 try { 306 rObject=l.getSelectedValue(); 307 sri=l.getSelectedIndex(); 308 } catch (Exception 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 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 |