1 19 20 package org.netbeans.modules.tasklist.core.filter; 21 22 import java.awt.BorderLayout ; 23 import java.util.Iterator ; 24 import java.util.HashMap ; 25 import java.util.Vector ; 26 import javax.swing.AbstractListModel ; 27 import javax.swing.DefaultListSelectionModel ; 28 import javax.swing.JComponent ; 29 import javax.swing.ListSelectionModel ; 30 import javax.swing.event.DocumentEvent ; 31 import javax.swing.event.DocumentListener ; 32 import javax.swing.event.ListSelectionEvent ; 33 import javax.swing.event.ListSelectionListener ; 34 import javax.swing.text.BadLocationException ; 35 import org.openide.awt.Mnemonics; 36 37 42 public class FiltersPanel extends javax.swing.JPanel implements java.awt.event.ActionListener { 43 44 45 public static final String SELECTED_FILTER = "fp-selected-filter"; 46 47 private HashMap panels = new HashMap (10); private FilteredTopComponent view; 50 52 private FilterRepository filterRepository; 53 54 58 private FilterModel filterModel; 59 60 65 public FiltersPanel(FilteredTopComponent view) { 66 this.view = view; 67 this.filterRepository = view.getFilters(); 68 this.filterModel = new FilterModel(filterRepository); 69 Iterator it = filterModel.filters.iterator(); 71 while (it.hasNext()) { panels.put(it.next(), null);} 72 73 myInitComponents(); 74 } 75 76 private static class FilterModel extends AbstractListModel { 77 78 public DefaultListSelectionModel selection = new DefaultListSelectionModel (); 79 public Vector filters; 80 81 public FilterModel(FilterRepository rep) { 82 filters = new Vector (rep.size() * 2); 83 Iterator it = rep.iterator(); 84 int selectedi = 0; 85 while (it.hasNext()) { 86 Filter f = ((Filter)it.next()); 87 if (f == rep.getActive()) selection.setSelectionInterval(selectedi, selectedi); 88 filters.add(f.clone()); 89 selectedi++; 90 } 91 } 92 93 public Iterator iterator() { 94 return filters.iterator(); 95 } 96 97 public Object getElementAt(int index) { 98 return ((Filter)filters.get(index)).getName(); 99 } 100 101 public int getSize() { 102 return filters.size(); 103 } 104 105 public Filter getSelectedFilter() { 106 if (getSelectedIndex() > -1) { 107 return (Filter)filters.get(getSelectedIndex()); 108 } else 109 return null; 110 } 111 112 public int getSelectedIndex() { 113 int i1 = selection.getMinSelectionIndex(), i2 = selection.getMaxSelectionIndex(); 114 if (i1 == i2 && i1 >= 0 && i1 < filters.size()) { 115 return i1; 116 } else { 117 return -1; 118 } 119 } 120 121 public void remove(int i) { 122 int s = getSelectedIndex(); 123 if (s != -1) { 124 filters.remove(i); 125 fireIntervalRemoved(this, i, i); 126 127 if (i < s) { 128 selection.setSelectionInterval(s-1, s-1); 129 } if (i == s) { 130 selection.setSelectionInterval(100,0); 131 } 132 } 133 } 134 135 public Filter get(int i ) { 136 return (Filter)filters.get(i); 137 } 138 139 public boolean add(Filter f) { 140 if (filters.add(f)) { 141 fireIntervalAdded(this, filters.size()-1, filters.size()-1); 142 return true; 143 } else 144 return false; 145 } 146 147 public int getIndexOf(Filter f) { 148 return filters.indexOf(f); 149 } 150 151 public void setFilterName(int i, String name) { 152 if (get(i) != null) { 153 get(i).setName(name); 154 fireContentsChanged(this, i, i); 155 } 156 } 157 } 158 159 public FilterRepository getFilterRepository() { 160 return filterRepository; 161 } 162 163 private void myInitComponents() { 164 initComponents(); 165 166 filtersList.setModel(filterModel); 168 filtersList.setSelectionModel(filterModel.selection); 169 filtersList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 170 171 173 Object selected = null; 174 if (view instanceof JComponent ) { 175 selected = ((JComponent ) view).getClientProperty(SELECTED_FILTER); 176 } 177 if (selected != null && selected instanceof String ) { 178 Iterator it = filterModel.iterator(); 179 int i = 0; 180 while (it.hasNext()) { 181 Filter filter = (Filter) it.next(); 182 if (selected.equals(filter.getName())) { 183 filtersList.setSelectedIndex(i); 184 break; 185 } 186 i++; 187 } 188 } 189 190 if (filterModel.getSelectedIndex() == -1) { 191 if (filterModel.getSize() > 0) { 192 filtersList.setSelectedIndex(0); 193 } 194 } 195 196 filtersList.addListSelectionListener(new ListSelectionListener () { 198 public void valueChanged(ListSelectionEvent e) { 199 if (!e.getValueIsAdjusting()) { 200 showFilter(filterModel.getSelectedFilter()); 201 DeleteButton.setEnabled(filterModel.getSelectedIndex() != -1); 202 } 203 } 204 }); 205 206 showFilter(filterModel.getSelectedFilter()); 207 DeleteButton.setEnabled(filterModel.getSelectedIndex() != -1); 208 209 Mnemonics.setLocalizedText(filtersLabel, 210 org.openide.util.NbBundle.getMessage(FiltersPanel.class, "LBL_Filters")); 212 213 } 214 215 220 private void showFilter(final Filter filter) { 221 FilterPanel panel = (FilterPanel)panels.get(filter); 222 if (panel == null) { 223 panel = new FilterPanel(view, filter); 224 panels.put(filter, panel); 225 panel.getFilterNameField().getDocument().addDocumentListener( 226 new DocumentListener () { 227 public void changedUpdate(DocumentEvent e) { update(e);} 228 public void insertUpdate(DocumentEvent e) { update(e);} 229 public void removeUpdate(DocumentEvent e) { update(e);} 230 231 private void update(DocumentEvent e) { 232 try { 233 filterModel.setFilterName(filterModel.getIndexOf(filter), 234 e.getDocument().getText(0, e.getDocument().getLength())); 235 } catch (BadLocationException ex) { System.err.println("EXXXX"); } 236 } 237 }); 238 } 239 240 if (filterEditorPlaceholder.getComponentCount()>0) filterEditorPlaceholder.remove(0); 241 filterEditorPlaceholder.add(panel,BorderLayout.CENTER); 242 panel.setVisible(true); 243 panel.requestFocus(); 244 245 if (filterModel.getSelectedFilter() != filter) { filtersList.setSelectedIndex(filterModel.getIndexOf(filter)); 248 } 249 250 filterEditorPlaceholder.validate(); 251 filterEditorPlaceholder.repaint(); 252 } 253 254 255 258 public boolean isValueValid() { 259 Iterator it = panels.values().iterator(); 260 while (it.hasNext()) { 261 FilterPanel fp = (FilterPanel)it.next(); 262 if (!fp.isValueValid()) return false; 263 } 264 return true; 265 } 266 267 271 public void updateFilters() { 272 filterRepository.clear(); 274 Iterator filterIt = filterModel.iterator(); 275 while (filterIt.hasNext()) { 276 Filter f = (Filter)filterIt.next(); 277 if (panels.get(f) !=null ) 278 f = ((FilterPanel)panels.get(f)).getFilter(); 280 filterRepository.add(f); 281 } 282 if (filterModel.getSelectedFilter()!= null) { 283 filterRepository.setActive(filterModel.getSelectedFilter()); 284 } 285 } 286 287 292 private void initComponents() { 294 java.awt.GridBagConstraints gridBagConstraints; 295 296 setLayout(new java.awt.GridBagLayout ()); 297 298 setBorder(javax.swing.BorderFactory.createEmptyBorder(12, 12, 0, 11)); 299 setMinimumSize(new java.awt.Dimension (0, 0)); 300 setPreferredSize(new java.awt.Dimension (800, 500)); 301 setRequestFocusEnabled(false); 302 filterEditorPlaceholder.setLayout(new java.awt.BorderLayout ()); 303 304 filterEditorPlaceholder.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 20, 0, 0)); 305 filterEditorPlaceholder.setAlignmentX(0.0F); 306 filterEditorPlaceholder.setMinimumSize(new java.awt.Dimension (0, 0)); 307 filterEditorPlaceholder.setPreferredSize(new java.awt.Dimension (32767, 32767)); 308 gridBagConstraints = new java.awt.GridBagConstraints (); 309 gridBagConstraints.gridx = 1; 310 gridBagConstraints.gridy = 1; 311 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 312 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 313 gridBagConstraints.weightx = 1.0; 314 gridBagConstraints.weighty = 1.0; 315 add(filterEditorPlaceholder, gridBagConstraints); 316 317 buttons1Panel.setLayout(new java.awt.GridBagLayout ()); 318 319 org.openide.awt.Mnemonics.setLocalizedText(newButton, java.util.ResourceBundle.getBundle("org/netbeans/modules/tasklist/core/filter/Bundle").getString("BTN_New_Filter")); 320 newButton.setToolTipText(java.util.ResourceBundle.getBundle("org/netbeans/modules/tasklist/core/filter/Bundle").getString("BTN_New_Filter_Hint")); 321 newButton.addActionListener(this); 322 323 gridBagConstraints = new java.awt.GridBagConstraints (); 324 gridBagConstraints.gridx = 0; 325 gridBagConstraints.gridy = 0; 326 gridBagConstraints.insets = new java.awt.Insets (0, 5, 0, 5); 327 buttons1Panel.add(newButton, gridBagConstraints); 328 newButton.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "ACSN_NewFilter")); 329 newButton.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "ACSD_NewFilter")); 330 331 org.openide.awt.Mnemonics.setLocalizedText(DeleteButton, java.util.ResourceBundle.getBundle("org/netbeans/modules/tasklist/core/filter/Bundle").getString("BTN_Delete_Filter")); 332 DeleteButton.setToolTipText(java.util.ResourceBundle.getBundle("org/netbeans/modules/tasklist/core/filter/Bundle").getString("BTN_Delete_Filter_Hint")); 333 DeleteButton.addActionListener(this); 334 335 gridBagConstraints = new java.awt.GridBagConstraints (); 336 gridBagConstraints.gridx = 1; 337 gridBagConstraints.gridy = 0; 338 gridBagConstraints.insets = new java.awt.Insets (0, 5, 0, 5); 339 buttons1Panel.add(DeleteButton, gridBagConstraints); 340 DeleteButton.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "ACSN_DeleteFilter")); 341 DeleteButton.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "ACSD_DeleteFilter")); 342 343 gridBagConstraints = new java.awt.GridBagConstraints (); 344 gridBagConstraints.gridx = 0; 345 gridBagConstraints.gridy = 2; 346 gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH; 347 gridBagConstraints.insets = new java.awt.Insets (10, 0, 0, 0); 348 add(buttons1Panel, gridBagConstraints); 349 350 buttons2Panel.setLayout(new java.awt.GridBagLayout ()); 351 352 gridBagConstraints = new java.awt.GridBagConstraints (); 353 gridBagConstraints.gridx = 1; 354 gridBagConstraints.gridy = 1; 355 gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHEAST; 356 gridBagConstraints.insets = new java.awt.Insets (10, 0, 0, 0); 357 add(buttons2Panel, gridBagConstraints); 358 359 filterListScrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 360 filterListScrollPane.setAlignmentX(0.0F); 361 filterListScrollPane.setAlignmentY(0.0F); 362 filterListScrollPane.setMinimumSize(new java.awt.Dimension (0, 0)); 363 filterListScrollPane.setPreferredSize(new java.awt.Dimension (32767, 32767)); 364 filterListScrollPane.setAutoscrolls(true); 365 filtersList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); 366 filtersList.setAlignmentX(0.0F); 367 filtersList.setMaximumSize(new java.awt.Dimension (32767, 32767)); 368 filterListScrollPane.setViewportView(filtersList); 369 370 gridBagConstraints = new java.awt.GridBagConstraints (); 371 gridBagConstraints.gridx = 0; 372 gridBagConstraints.gridy = 1; 373 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 374 gridBagConstraints.weighty = 1.0; 375 add(filterListScrollPane, gridBagConstraints); 376 filterListScrollPane.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getBundle(FiltersPanel.class).getString("ACSN_Filters")); 377 filterListScrollPane.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getBundle(FiltersPanel.class).getString("ACSD_Filters")); 378 379 filtersLabel.setLabelFor(filtersList); 380 org.openide.awt.Mnemonics.setLocalizedText(filtersLabel, org.openide.util.NbBundle.getBundle(FiltersPanel.class).getString("LBL_Filters")); 381 filtersLabel.setToolTipText(org.openide.util.NbBundle.getBundle(FiltersPanel.class).getString("HNT_Filters")); 382 gridBagConstraints = new java.awt.GridBagConstraints (); 383 gridBagConstraints.gridx = 0; 384 gridBagConstraints.gridy = 0; 385 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 386 add(filtersLabel, gridBagConstraints); 387 filtersLabel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getBundle(FiltersPanel.class).getString("ACSN_Filters")); 388 filtersLabel.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getBundle(FiltersPanel.class).getString("ACSD_Filters")); 389 390 } 391 392 394 public void actionPerformed(java.awt.event.ActionEvent evt) { 395 if (evt.getSource() == newButton) { 396 FiltersPanel.this.newButtonActionPerformed(evt); 397 } 398 else if (evt.getSource() == DeleteButton) { 399 FiltersPanel.this.DeleteButtonActionPerformed(evt); 400 } 401 } 403 private void previewButtonActionPerformed(java.awt.event.ActionEvent evt) { 405 406 } 408 private void DeleteButtonActionPerformed(java.awt.event.ActionEvent evt) { int i = filterModel.getSelectedIndex(); 411 if (i != -1) { 412 Filter f = filterModel.get(i); 413 filterModel.remove(i); 414 panels.remove(f); 415 } 416 } 418 private void newButtonActionPerformed(java.awt.event.ActionEvent evt) { Filter f = view.createFilter(); 421 filterModel.add(f); 422 panels.put(f,null); 423 showFilter(f); 424 } 426 427 final javax.swing.JButton DeleteButton = new javax.swing.JButton (); 429 final javax.swing.JPanel buttons1Panel = new javax.swing.JPanel (); 430 final javax.swing.JPanel buttons2Panel = new javax.swing.JPanel (); 431 final javax.swing.JPanel filterEditorPlaceholder = new javax.swing.JPanel (); 432 final javax.swing.JScrollPane filterListScrollPane = new javax.swing.JScrollPane (); 433 final javax.swing.JLabel filtersLabel = new javax.swing.JLabel (); 434 final javax.swing.JList filtersList = new javax.swing.JList (); 435 final javax.swing.JButton newButton = new javax.swing.JButton (); 436 438 439 440 } 441 | Popular Tags |