KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > suberic > pooka > gui > search > SearchFolderPanel


1 package net.suberic.pooka.gui.search;
2 import net.suberic.pooka.*;
3 import javax.swing.*;
4 import java.awt.event.*;
5 import java.awt.Dimension JavaDoc;
6 import java.util.Vector JavaDoc;
7 import java.util.HashMap JavaDoc;
8
9 /**
10  * This is a panel which allows you to choose which folders you will
11  * use for searches.
12  */

13 public class SearchFolderPanel extends JPanel {
14
15     Vector JavaDoc selected = new Vector JavaDoc();
16     boolean isEditable = true;
17     JList folderListSelector;
18     java.util.HashMap JavaDoc labelToFolderMap;
19
20     /**
21      * Create a SearchFolderPanel with no folders selected. By default, this
22      * means that we have a SearchFolderPanel which can select from all of
23      * the available Folders.
24      */

25     public SearchFolderPanel() {
26     this(new FolderInfo[0], Pooka.getStoreManager().getAllOpenFolders());
27     }
28
29     
30     /**
31      * Create a SearchFolderPanel with all the Folders in the given Store(s)
32      * selected. By default, all available folders will be allowed to be
33      * selected.
34      */

35     public SearchFolderPanel(StoreInfo[] storeList) {
36     this(storeList, Pooka.getStoreManager().getAllOpenFolders());
37     }
38
39     /**
40      * Create a SearchFolderPanel with all the Folders in the given Store(s)
41      * selected. allowedValues shows which Folders are available.
42      */

43     public SearchFolderPanel(StoreInfo[] storeList, Vector JavaDoc allowedValues) {
44     selected = new Vector JavaDoc();
45     for (int i = 0; i < storeList.length; i++)
46         selected.addAll(storeList[i].getAllFolders());
47
48     if (!isEditable) {
49         createStaticPanel(selected);
50     } else {
51         createDynamicPanel(selected, allowedValues);
52     }
53     }
54
55     /**
56      * Create a SearchFolderPanel with all the Folders given selected.
57      * By default, all available folders will be allowed to be
58      * selected.
59      */

60     public SearchFolderPanel(FolderInfo[] folderList) {
61     this(folderList, Pooka.getStoreManager().getAllOpenFolders());
62     }
63
64     /**
65      * Create a SearchFolderPanel with all the Folders given selected.
66      * allowedValues shows which Folders are available.
67      */

68     public SearchFolderPanel(FolderInfo[] folderList, Vector JavaDoc allowedValues) {
69     for (int i = 0; i < folderList.length; i++) {
70         selected.add(folderList[i]);
71     }
72     if (!isEditable) {
73         createStaticPanel(selected);
74     } else {
75         createDynamicPanel(selected, allowedValues);
76     }
77     }
78
79     /**
80      * This creates a static panel.
81      */

82     public void createStaticPanel(Vector JavaDoc folderList) {
83     StringBuffer JavaDoc msg = new StringBuffer JavaDoc();
84     msg.append("Searching folders:\n");
85     for (int i = 0; i < folderList.size(); i++)
86         msg.append(((FolderInfo)folderList.elementAt(i)).getFolderID() + "\n");
87     JTextArea label = new JTextArea(msg.toString());
88     this.add(label);
89     }
90
91     /**
92      * Creates a dynamic panel with the given Folders selected.
93      */

94     public void createDynamicPanel(Vector JavaDoc folderList, Vector JavaDoc allowedValues) {
95     Vector JavaDoc folderNameList = new Vector JavaDoc();
96     labelToFolderMap = new java.util.HashMap JavaDoc();
97     for (int i = 0; i < allowedValues.size(); i++) {
98         FolderInfo folder = (FolderInfo) allowedValues.elementAt(i);
99         String JavaDoc name = folder.getFolderID();
100         folderNameList.add(name);
101         labelToFolderMap.put(name, folder);
102     }
103
104     folderListSelector = new JList(folderNameList);
105     JScrollPane scroller = new JScrollPane(folderListSelector, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
106     /*
107     Dimension scrollerPrefSize = folderListSelector.getPreferredSize();
108     scrollerPrefSize.width = Math.min(Integer.parseInt(Pooka.getProperty("Pooka.searchFolderDisplay.hsize", "500")), scrollerPrefSize.width);
109     scrollerPrefSize.height = Math.min(Integer.parseInt(Pooka.getProperty("Pooka.searchFolderDisplay.vsize", "100")), scrollerPrefSize.height);
110     */

111     Dimension JavaDoc scrollerPrefSize = new Dimension JavaDoc(500, 100);
112     scroller.setPreferredSize(scrollerPrefSize);
113
114     this.add(scroller);
115
116     folderListSelector.setValueIsAdjusting(true);
117     // now go ahead and select the selected values.
118
for (int i = 0 ; i < folderList.size(); i++) {
119         String JavaDoc folderId = ((FolderInfo)folderList.elementAt(i)).getFolderID();
120         if (folderListSelector.getSelectedIndex() == -1) {
121         folderListSelector.setSelectedValue(folderId, true);
122         } else {
123         int index = folderNameList.indexOf(folderId);
124         if (index != -1)
125             folderListSelector.addSelectionInterval(index, index);
126         }
127     }
128     folderListSelector.setValueIsAdjusting(false);
129     }
130
131     /**
132      * Returns a Vector of selected FolderInfos to search.
133      */

134     public Vector JavaDoc getSelectedFolders() {
135     if (! isEditable) {
136         return selected;
137     } else {
138         //get the selected folders from the gui component.
139
Vector JavaDoc returnValue = new Vector JavaDoc();
140         Object JavaDoc[] selectedValues = folderListSelector.getSelectedValues();
141         for (int i = 0; i < selectedValues.length; i++) {
142         String JavaDoc currentSelection = (String JavaDoc) selectedValues[i];
143         FolderInfo currentFolder = (FolderInfo) labelToFolderMap.get(currentSelection);
144         returnValue.add(currentFolder);
145         }
146
147         return returnValue;
148     }
149     }
150     
151 }
152
Popular Tags