1 19 20 package org.apache.tools.ant.module.wizards.shortcut; 21 22 import java.awt.Component ; 23 import java.util.ArrayList ; 24 import java.util.HashSet ; 25 import java.util.List ; 26 import java.util.Set ; 27 import javax.swing.DefaultListCellRenderer ; 28 import javax.swing.DefaultListModel ; 29 import javax.swing.JList ; 30 import javax.swing.JPanel ; 31 import javax.swing.ListModel ; 32 import javax.swing.event.ChangeEvent ; 33 import javax.swing.event.ChangeListener ; 34 import javax.swing.event.DocumentEvent ; 35 import javax.swing.event.DocumentListener ; 36 import org.openide.WizardDescriptor; 37 import org.openide.loaders.DataFolder; 38 import org.openide.loaders.DataObject; 39 import org.openide.util.HelpCtx; 40 41 45 final class SelectFolderPanel extends JPanel implements DocumentListener { 46 47 private final String prop; 48 private final boolean stripAmps; 49 private final SelectFolderWizardPanel wiz; 50 private final DataFolder top; 51 52 53 public SelectFolderPanel(SelectFolderWizardPanel wiz, String name, String hint, String displayNameLabelText, DataFolder top, boolean stripAmps, String prop) { 54 this.wiz = wiz; 55 initComponents (); 56 setName (name); 58 hintsArea.setText (hint); 59 initAccessibility (hint); 60 displayNameLabel.setText(displayNameLabelText); 61 this.prop = prop; 62 this.top = top; 63 this.stripAmps = stripAmps; 64 DefaultListModel model = new DefaultListModel (); 65 DataObject[] folders = findFolders(top); 66 for (int i = 0; i < folders.length; i++) { 67 model.addElement(folders[i]); 68 } 69 folderList.setModel(model); 70 folderList.setCellRenderer(new CellRenderer ()); 71 displayNameField.getDocument().addDocumentListener(this); 72 } 73 74 ListModel getModel() { 75 return folderList.getModel(); 76 } 77 78 private String getDisplayName(DataFolder folder) { 79 String name = folder.getNodeDelegate().getDisplayName(); 80 if (stripAmps) { 81 int idx = name.indexOf('&'); 83 if (idx != -1) { 84 name = name.substring(0, idx) + name.substring(idx + 1); 85 } 86 } 87 return name; 88 } 89 90 String getNestedDisplayName(DataFolder folder) { 91 DataFolder f = folder; 92 StringBuffer b = new StringBuffer (); 93 while (f != top) { 94 if (b.length() > 0) { 95 b.insert(0, " \u2192 "); } 97 b.insert(0, getDisplayName(f)); 98 f = f.getFolder(); 99 } 100 return b.toString(); 101 } 102 103 private DataFolder getFolder() { 104 return (DataFolder)folderList.getSelectedValue(); 105 } 106 107 private void setFolder(DataFolder f) { 108 folderList.setSelectedValue(f, true); 109 } 110 111 private static DataFolder[] findFolders(DataFolder top) { 112 List <DataFolder> folders = new ArrayList <DataFolder>(); 113 visit(folders, top); 115 folders.remove(0); 116 return folders.toArray(new DataFolder[folders.size()]); 117 } 118 119 private static void visit(List <DataFolder> folders, DataFolder f) { 120 folders.add(f); 121 DataObject[] kids = f.getChildren(); 122 for (int i = 0; i < kids.length; i++) { 123 if (kids[i] instanceof DataFolder) { 124 visit(folders, (DataFolder)kids[i]); 125 } 126 } 127 } 128 129 private final class CellRenderer extends DefaultListCellRenderer { 130 131 public CellRenderer() {} 132 133 @Override 134 public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 135 DataFolder f = (DataFolder)value; 136 String display = getNestedDisplayName(f); 137 return super.getListCellRendererComponent(list, display, index, isSelected, cellHasFocus); 138 } 139 140 } 141 142 144 @Override 145 public void requestFocus() { 146 super.requestFocus(); 147 folderList.requestFocus(); 148 } 149 150 private void initAccessibility(String hint) { 151 this.getAccessibleContext().setAccessibleDescription(hint); } 152 153 158 private void initComponents() { hintsArea = new javax.swing.JTextArea (); 160 folderScrollPane = new javax.swing.JScrollPane (); 161 folderList = new javax.swing.JList (); 162 displayNamePanel = new javax.swing.JPanel (); 163 displayNameLabel = new javax.swing.JLabel (); 164 displayNameField = new javax.swing.JTextField (); 165 166 setLayout(new java.awt.BorderLayout (0, 11)); 167 168 hintsArea.setEditable(false); 169 hintsArea.setFont(javax.swing.UIManager.getFont ("Label.font")); 170 hintsArea.setText("<hints>"); 171 hintsArea.setBackground(new java.awt.Color (204, 204, 204)); 172 hintsArea.setLineWrap(true); 173 hintsArea.setForeground(new java.awt.Color (102, 102, 153)); 174 hintsArea.setWrapStyleWord(true); 175 hintsArea.setDisabledTextColor(javax.swing.UIManager.getColor ("Label.foreground")); 176 hintsArea.setOpaque(false); 177 hintsArea.setEnabled(false); 178 add(hintsArea, java.awt.BorderLayout.NORTH); 179 180 folderList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); 181 folderList.addListSelectionListener(new javax.swing.event.ListSelectionListener () { 182 public void valueChanged(javax.swing.event.ListSelectionEvent evt) { 183 folderListValueChanged(evt); 184 } 185 }); 186 187 folderScrollPane.setViewportView(folderList); 188 folderList.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(SelectFolderPanel.class, "ACSN_folderList")); 189 folderList.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(SelectFolderPanel.class, "ACSD_folderList")); 190 191 add(folderScrollPane, java.awt.BorderLayout.CENTER); 192 193 displayNamePanel.setLayout(new java.awt.FlowLayout (java.awt.FlowLayout.LEFT)); 194 195 displayNameLabel.setText("<set display name>"); 196 displayNameLabel.setLabelFor(displayNameField); 197 displayNamePanel.add(displayNameLabel); 198 199 displayNameField.setColumns(30); 200 displayNamePanel.add(displayNameField); 201 202 add(displayNamePanel, java.awt.BorderLayout.SOUTH); 203 204 } 206 private void folderListValueChanged(javax.swing.event.ListSelectionEvent evt) { wiz.fireChangeEvent(); 208 } 210 public void insertUpdate(DocumentEvent e) { 211 wiz.fireChangeEvent(); 213 } 214 215 public void removeUpdate(DocumentEvent e) { 216 wiz.fireChangeEvent(); 218 } 219 220 public void changedUpdate(DocumentEvent e) { 221 } 223 224 private javax.swing.JTextField displayNameField; 226 private javax.swing.JLabel displayNameLabel; 227 private javax.swing.JPanel displayNamePanel; 228 private javax.swing.JList folderList; 229 private javax.swing.JScrollPane folderScrollPane; 230 private javax.swing.JTextArea hintsArea; 231 233 public static class SelectFolderWizardPanel implements WizardDescriptor.Panel { 234 235 private SelectFolderPanel panel; 236 237 private String namePanel; 238 private String hintPanel; 239 private String displayNameLabelText; 240 private DataFolder topPanel; 241 private boolean stripAmpsPanel; 242 private String propPanel; 243 244 public SelectFolderWizardPanel(String name, String hint, String displayNameLabelText, DataFolder top, boolean stripAmps, String prop) { 245 this.namePanel = name; 246 this.hintPanel = hint; 247 this.displayNameLabelText = displayNameLabelText; 248 this.topPanel = top; 249 this.stripAmpsPanel = stripAmps; 250 this.propPanel = prop; 251 } 252 253 public Component getComponent () { 254 return getPanel(); 255 } 256 257 SelectFolderPanel getPanel() { 258 if (panel == null) { 259 panel = new SelectFolderPanel(this, namePanel, hintPanel, displayNameLabelText, topPanel, stripAmpsPanel, propPanel); 260 } 261 return panel; 262 } 263 264 public HelpCtx getHelp () { 265 return HelpCtx.DEFAULT_HELP; 266 } 267 268 public boolean isValid () { 269 return getPanel().getFolder() != null && 270 getPanel().displayNameField.getText().length() > 0; 271 } 272 273 private final Set <ChangeListener > listeners = new HashSet <ChangeListener >(1); 274 public final void addChangeListener (ChangeListener l) { 275 synchronized (listeners) { 276 listeners.add (l); 277 } 278 } 279 public final void removeChangeListener (ChangeListener l) { 280 synchronized (listeners) { 281 listeners.remove (l); 282 } 283 } 284 protected final void fireChangeEvent () { 285 ChangeListener [] ls; 286 synchronized (listeners) { 287 ls = listeners.toArray(new ChangeListener [listeners.size()]); 288 } 289 ChangeEvent ev = new ChangeEvent (this); 290 for (ChangeListener l : ls) { 291 l.stateChanged(ev); 292 } 293 } 294 295 public void readSettings (Object settings) { 296 WizardDescriptor wiz = (WizardDescriptor) settings; 297 getPanel().setFolder((DataFolder)wiz.getProperty(getPanel().prop)); 298 String dn = (String )wiz.getProperty(ShortcutWizard.PROP_DISPLAY_NAME); 299 getPanel().displayNameField.setText(dn != null ? dn : ""); } 301 302 public void storeSettings (Object settings) { 303 DataFolder folder = getPanel().getFolder(); 304 WizardDescriptor wiz = (WizardDescriptor) settings; 305 wiz.putProperty(getPanel().prop, folder); 306 wiz.putProperty(ShortcutWizard.PROP_DISPLAY_NAME, getPanel().displayNameField.getText()); 307 } 308 309 } 310 } 311 | Popular Tags |