KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > tasklist > core > filter > FiltersPanel


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 package org.netbeans.modules.tasklist.core.filter;
21
22 import java.awt.BorderLayout JavaDoc;
23 import java.util.Iterator JavaDoc;
24 import java.util.HashMap JavaDoc;
25 import java.util.Vector JavaDoc;
26 import javax.swing.AbstractListModel JavaDoc;
27 import javax.swing.DefaultListSelectionModel JavaDoc;
28 import javax.swing.JComponent JavaDoc;
29 import javax.swing.ListSelectionModel JavaDoc;
30 import javax.swing.event.DocumentEvent JavaDoc;
31 import javax.swing.event.DocumentListener JavaDoc;
32 import javax.swing.event.ListSelectionEvent JavaDoc;
33 import javax.swing.event.ListSelectionListener JavaDoc;
34 import javax.swing.text.BadLocationException JavaDoc;
35 import org.openide.awt.Mnemonics;
36
37 /**
38  * Panel with a list of filters.
39  *
40  * @author or141057
41  */

42 public class FiltersPanel extends javax.swing.JPanel JavaDoc implements java.awt.event.ActionListener JavaDoc {
43
44     /** Name of client property holding name of selected filter */
45     public static final String JavaDoc SELECTED_FILTER = "fp-selected-filter";
46
47     private HashMap JavaDoc panels = new HashMap JavaDoc(10); // Filter.ListModelElement -> FilterPanel
48
private FilteredTopComponent view; // initialized in constructor
49

50     /** Reference to orginal filterRepository this dialog act upon.
51      * It is not changed until ok or apply is pressed */

52     private FilterRepository filterRepository;
53
54     /**
55      * Contains temporary data (cloned filters) for the list and also selection
56      * model for the list.
57      */

58     private FilterModel filterModel;
59     
60     /**
61      * Creates new form FiltersPanel
62      *
63      * @param view a filtered TC
64      */

65     public FiltersPanel(FilteredTopComponent view) {
66         this.view = view;
67         this.filterRepository = view.getFilters();
68         this.filterModel = new FilterModel(filterRepository);
69         // init hash-map of panels
70
Iterator JavaDoc 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 JavaDoc {
77
78         public DefaultListSelectionModel JavaDoc selection = new DefaultListSelectionModel JavaDoc();
79         public Vector JavaDoc filters;
80         
81         public FilterModel(FilterRepository rep) {
82             filters = new Vector JavaDoc(rep.size() * 2);
83             Iterator JavaDoc 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 JavaDoc iterator() {
94             return filters.iterator();
95         }
96         
97         public Object JavaDoc 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 JavaDoc 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         // init filters-listbox model
167
filtersList.setModel(filterModel);
168         filtersList.setSelectionModel(filterModel.selection);
169         filtersList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
170
171         // try to select just applied filter
172

173         Object JavaDoc selected = null;
174         if (view instanceof JComponent JavaDoc) {
175             selected = ((JComponent JavaDoc) view).getClientProperty(SELECTED_FILTER);
176         }
177         if (selected != null && selected instanceof String JavaDoc) {
178             Iterator JavaDoc 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         // hook list selection
197
filtersList.addListSelectionListener(new ListSelectionListener JavaDoc() {
198             public void valueChanged(ListSelectionEvent JavaDoc 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")); // NOI18N
211

212         
213     }
214     
215     /**
216      * Initializes the editor to the state when <filter> is selected in the list
217      * and it is shown on the right side. It can be used to propagate values in
218      * both directions - from list to pane and opposite and also to both at once.
219      */

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 JavaDoc() {
227           public void changedUpdate(DocumentEvent JavaDoc e) { update(e);}
228           public void insertUpdate(DocumentEvent JavaDoc e) { update(e);}
229           public void removeUpdate(DocumentEvent JavaDoc e) { update(e);}
230                         
231           private void update(DocumentEvent JavaDoc e) {
232             try {
233               filterModel.setFilterName(filterModel.getIndexOf(filter),
234                         e.getDocument().getText(0, e.getDocument().getLength()));
235             } catch (BadLocationException JavaDoc 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         // select the active filter
246
if (filterModel.getSelectedFilter() != filter) { // check to prevent cycle in notifications
247
filtersList.setSelectedIndex(filterModel.getIndexOf(filter));
248         }
249         
250         filterEditorPlaceholder.validate();
251         filterEditorPlaceholder.repaint();
252     }
253       
254        
255     /**
256      * Lift of isValueValid to FiltersPanel
257      */

258     public boolean isValueValid() {
259         Iterator JavaDoc 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     /**
268      * Reads data from the form into the filter repository
269      * that was passed-in in the constructor (returned by {@link #getFilterRepository})
270      */

271     public void updateFilters() {
272       filterRepository.clear(); // throw away all original filters
273

274       Iterator JavaDoc 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(); // has panel, was touched
279

280           filterRepository.add(f);
281       }
282       if (filterModel.getSelectedFilter()!= null) {
283           filterRepository.setActive(filterModel.getSelectedFilter());
284       }
285     }
286
287     /** This method is called from within the constructor to
288      * initialize the form.
289      * WARNING: Do NOT modify this code. The content of this method is
290      * always regenerated by the Form Editor.
291      */

292     // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
293
private void initComponents() {
294         java.awt.GridBagConstraints JavaDoc gridBagConstraints;
295
296         setLayout(new java.awt.GridBagLayout JavaDoc());
297
298         setBorder(javax.swing.BorderFactory.createEmptyBorder(12, 12, 0, 11));
299         setMinimumSize(new java.awt.Dimension JavaDoc(0, 0));
300         setPreferredSize(new java.awt.Dimension JavaDoc(800, 500));
301         setRequestFocusEnabled(false);
302         filterEditorPlaceholder.setLayout(new java.awt.BorderLayout JavaDoc());
303
304         filterEditorPlaceholder.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 20, 0, 0));
305         filterEditorPlaceholder.setAlignmentX(0.0F);
306         filterEditorPlaceholder.setMinimumSize(new java.awt.Dimension JavaDoc(0, 0));
307         filterEditorPlaceholder.setPreferredSize(new java.awt.Dimension JavaDoc(32767, 32767));
308         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
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 JavaDoc());
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 JavaDoc();
324         gridBagConstraints.gridx = 0;
325         gridBagConstraints.gridy = 0;
326         gridBagConstraints.insets = new java.awt.Insets JavaDoc(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 JavaDoc();
336         gridBagConstraints.gridx = 1;
337         gridBagConstraints.gridy = 0;
338         gridBagConstraints.insets = new java.awt.Insets JavaDoc(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 JavaDoc();
344         gridBagConstraints.gridx = 0;
345         gridBagConstraints.gridy = 2;
346         gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH;
347         gridBagConstraints.insets = new java.awt.Insets JavaDoc(10, 0, 0, 0);
348         add(buttons1Panel, gridBagConstraints);
349
350         buttons2Panel.setLayout(new java.awt.GridBagLayout JavaDoc());
351
352         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
353         gridBagConstraints.gridx = 1;
354         gridBagConstraints.gridy = 1;
355         gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHEAST;
356         gridBagConstraints.insets = new java.awt.Insets JavaDoc(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 JavaDoc(0, 0));
363         filterListScrollPane.setPreferredSize(new java.awt.Dimension JavaDoc(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 JavaDoc(32767, 32767));
368         filterListScrollPane.setViewportView(filtersList);
369
370         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
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 JavaDoc();
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     // Code for dispatching events from components to event handlers.
393

394     public void actionPerformed(java.awt.event.ActionEvent JavaDoc 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     }// </editor-fold>//GEN-END:initComponents
402

403     private void previewButtonActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_previewButtonActionPerformed
404

405
406     }//GEN-LAST:event_previewButtonActionPerformed
407

408     private void DeleteButtonActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_DeleteButtonActionPerformed
409
// TODO add your handling code here:
410
int i = filterModel.getSelectedIndex();
411         if (i != -1) {
412             Filter f = filterModel.get(i);
413             filterModel.remove(i);
414             panels.remove(f);
415         }
416     }//GEN-LAST:event_DeleteButtonActionPerformed
417

418     private void newButtonActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_newButtonActionPerformed
419
// TODO add your handling code here:
420
Filter f = view.createFilter();
421         filterModel.add(f);
422         panels.put(f,null);
423         showFilter(f);
424     }//GEN-LAST:event_newButtonActionPerformed
425

426     
427     // Variables declaration - do not modify//GEN-BEGIN:variables
428
final javax.swing.JButton JavaDoc DeleteButton = new javax.swing.JButton JavaDoc();
429     final javax.swing.JPanel JavaDoc buttons1Panel = new javax.swing.JPanel JavaDoc();
430     final javax.swing.JPanel JavaDoc buttons2Panel = new javax.swing.JPanel JavaDoc();
431     final javax.swing.JPanel JavaDoc filterEditorPlaceholder = new javax.swing.JPanel JavaDoc();
432     final javax.swing.JScrollPane JavaDoc filterListScrollPane = new javax.swing.JScrollPane JavaDoc();
433     final javax.swing.JLabel JavaDoc filtersLabel = new javax.swing.JLabel JavaDoc();
434     final javax.swing.JList JavaDoc filtersList = new javax.swing.JList JavaDoc();
435     final javax.swing.JButton JavaDoc newButton = new javax.swing.JButton JavaDoc();
436     // End of variables declaration//GEN-END:variables
437

438     
439     
440 }
441
Popular Tags