KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > core > gui > search > SearchDialog


1 package org.columba.core.gui.search;
2
3 import java.awt.BorderLayout JavaDoc;
4 import java.awt.Color JavaDoc;
5 import java.awt.Font JavaDoc;
6 import java.awt.event.ActionEvent JavaDoc;
7 import java.awt.event.ActionListener JavaDoc;
8 import java.util.Iterator JavaDoc;
9 import java.util.List JavaDoc;
10 import java.util.Vector JavaDoc;
11
12 import javax.swing.BorderFactory JavaDoc;
13 import javax.swing.ButtonGroup JavaDoc;
14 import javax.swing.JButton JavaDoc;
15 import javax.swing.JComponent JavaDoc;
16 import javax.swing.JDialog JavaDoc;
17 import javax.swing.JFrame JavaDoc;
18 import javax.swing.JLabel JavaDoc;
19 import javax.swing.JPanel JavaDoc;
20 import javax.swing.JRadioButton JavaDoc;
21 import javax.swing.SwingConstants JavaDoc;
22
23 import org.columba.core.gui.base.SingleSideEtchedBorder;
24 import org.columba.core.gui.search.api.ICriteriaRenderer;
25 import org.columba.core.search.api.ISearchCriteria;
26 import org.columba.core.search.api.ISearchProvider;
27
28 import com.jgoodies.forms.builder.DefaultFormBuilder;
29 import com.jgoodies.forms.factories.ButtonBarFactory;
30 import com.jgoodies.forms.layout.FormLayout;
31
32 class SearchDialog extends JDialog JavaDoc {
33
34     private JRadioButton JavaDoc rb1;
35
36     private JRadioButton JavaDoc rb2;
37
38     private CriteriaPanel criteriaPanel;
39
40     private JButton JavaDoc searchButton;
41
42     private JButton JavaDoc helpButton;
43
44     private JButton JavaDoc clearButton;
45
46     private JButton JavaDoc closeButton;
47
48     private boolean success = false;
49
50     public SearchDialog(JFrame JavaDoc parent, Iterator JavaDoc<ISearchProvider> it) {
51         super(parent, true);
52
53         setUndecorated(true);
54
55         // Border border = BorderFactory.createCompoundBorder(new
56
// ShadowBorder(),BorderFactory.createEmptyBorder(10, 10, 10,10));
57
// ((JPanel) getContentPane()).setBorder(border);
58
((JPanel JavaDoc) getContentPane()).setBorder(BorderFactory
59                 .createLineBorder(Color.lightGray));
60
61         initCriteriaPanel(it);
62         initComponents();
63         layoutComponents();
64
65         pack();
66
67         initListeners();
68
69         getRootPane().setDefaultButton(searchButton);
70     }
71
72     private void initListeners() {
73         searchButton.addActionListener(new ActionListener JavaDoc() {
74             public void actionPerformed(ActionEvent JavaDoc e) {
75                 success = true;
76                 setVisible(false);
77             }
78         });
79
80         clearButton.addActionListener(new ActionListener JavaDoc() {
81             public void actionPerformed(ActionEvent JavaDoc e) {
82                 criteriaPanel.clear();
83             }
84         });
85
86         closeButton.addActionListener(new ActionListener JavaDoc() {
87             public void actionPerformed(ActionEvent JavaDoc e) {
88                 setVisible(false);
89             }
90         });
91     }
92
93     @Override JavaDoc
94     public void setVisible(boolean b) {
95         super.setVisible(b);
96
97         if (b)
98             success = true;
99     }
100
101     private void layoutComponents() {
102
103         setLayout(new BorderLayout JavaDoc());
104
105         JPanel JavaDoc topPanel = new JPanel JavaDoc();
106         topPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10));
107
108         FormLayout layout = new FormLayout(
109                 "left:default:grow, 12dlu, right:default, 3dlu, right:default",
110                 "");
111
112         // create a form builder
113
DefaultFormBuilder builder = new DefaultFormBuilder(layout, topPanel);
114
115         builder.append(new JLabel JavaDoc());
116         builder.append(rb1);
117         builder.append(rb2);
118
119         add(topPanel, BorderLayout.NORTH);
120         add(criteriaPanel, BorderLayout.CENTER);
121
122         JPanel JavaDoc bottomPanel = ButtonBarFactory.buildHelpBar(helpButton,
123                 searchButton, clearButton, closeButton);
124
125         bottomPanel.setBorder(BorderFactory.createCompoundBorder(
126                 new SingleSideEtchedBorder(SwingConstants.TOP), BorderFactory
127                         .createEmptyBorder(8, 8, 8, 8)));
128
129         add(bottomPanel, BorderLayout.SOUTH);
130     }
131
132     private void initCriteriaPanel(Iterator JavaDoc<ISearchProvider> it) {
133         criteriaPanel = new CriteriaPanel();
134         criteriaPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
135
136         boolean firstTime = true;
137         while (it.hasNext()) {
138             ISearchProvider p = it.next();
139             System.out.println("provider=" + p.getName());
140
141             JLabel JavaDoc label = new JLabel JavaDoc(p.getName());
142             label.setIcon(p.getIcon());
143             label.setFont(label.getFont().deriveFont(Font.BOLD));
144
145             if (!firstTime)
146                 label.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0));
147             else
148                 firstTime = false;
149
150             criteriaPanel.addSeparator(label);
151             Iterator JavaDoc<ISearchCriteria> it2 = p.getAllCriteria("").listIterator();
152             while (it2.hasNext()) {
153                 ISearchCriteria c = it2.next();
154                 System.out.println("criteria=" + c.getName());
155
156                 ICriteriaRenderer r = p.getCriteriaRenderer(c
157                         .getTechnicalName());
158                 if (r != null)
159                     criteriaPanel.addRenderer(r);
160             }
161
162         }
163     }
164
165     private void initComponents() {
166         rb1 = new JRadioButton JavaDoc("Match All Words");
167         rb1.setOpaque(false);
168         rb1.setSelected(true);
169         rb2 = new JRadioButton JavaDoc("Match Any");
170         rb2.setOpaque(false);
171         ButtonGroup JavaDoc group = new ButtonGroup JavaDoc();
172         group.add(rb1);
173         group.add(rb2);
174
175         searchButton = new JButton JavaDoc("Search");
176         searchButton.setMnemonic('s');
177         searchButton.setDefaultCapable(true);
178
179         helpButton = new JButton JavaDoc("Help");
180         helpButton.setMnemonic('h');
181
182         clearButton = new JButton JavaDoc("Clear");
183         clearButton.setMnemonic('l');
184
185         closeButton = new JButton JavaDoc("Close");
186         closeButton.setMnemonic('c');
187
188     }
189
190     public boolean isSuccess() {
191         return success;
192     }
193
194     public boolean isMatchAll() {
195         return rb1.isSelected();
196     }
197
198     public Iterator JavaDoc<ICriteriaRenderer> getAllCriteriaRenderer() {
199         return criteriaPanel.getAllRenderers();
200     }
201
202     class CriteriaPanel extends JPanel JavaDoc {
203
204         private List JavaDoc<ICriteriaRenderer> list = new Vector JavaDoc<ICriteriaRenderer>();
205
206         private DefaultFormBuilder builder;
207
208         CriteriaPanel() {
209
210             FormLayout layout = new FormLayout(
211                     "3dlu, right:default, 6dlu, left:default:grow, 12dlu, right:default, 6dlu, left:default:grow",
212                     "");
213
214             // create a form builder
215
builder = new DefaultFormBuilder(layout, this);
216             builder.setLeadingColumnOffset(1);
217         }
218
219         public void addSeparator(JComponent JavaDoc c) {
220
221             builder.nextLine();
222             builder.appendRow("default");
223             builder.setLeadingColumnOffset(0);
224             builder.append(c, 6);
225             builder.nextLine();
226             builder.setLeadingColumnOffset(1);
227
228         }
229
230         public void addRenderer(ICriteriaRenderer renderer) {
231             if (renderer == null)
232                 throw new IllegalArgumentException JavaDoc("renderer == null");
233
234             list.add(renderer);
235
236             builder.append(renderer.getLabel());
237             builder.append(renderer.getEditor());
238         }
239
240         public void removeRenderer(ICriteriaRenderer renderer) {
241             list.remove(renderer);
242         }
243
244         public void removeRenderer(int index) {
245             list.remove(index);
246         }
247
248         public Iterator JavaDoc<ICriteriaRenderer> getAllRenderers() {
249             return list.listIterator();
250         }
251
252         public void clear() {
253             Iterator JavaDoc<ICriteriaRenderer> it = getAllRenderers();
254             while (it.hasNext()) {
255                 ICriteriaRenderer r = it.next();
256                 r.clear();
257             }
258         }
259     }
260
261 }
262
Popular Tags