KickJava   Java API By Example, From Geeks To Geeks.

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


1 package org.columba.core.gui.search;
2
3 import java.awt.BorderLayout JavaDoc;
4 import java.awt.Color JavaDoc;
5 import java.awt.Component JavaDoc;
6 import java.awt.Font JavaDoc;
7 import java.awt.Graphics JavaDoc;
8 import java.awt.Insets JavaDoc;
9 import java.awt.event.ActionEvent JavaDoc;
10 import java.awt.event.ActionListener JavaDoc;
11
12 import javax.swing.Action JavaDoc;
13 import javax.swing.BorderFactory JavaDoc;
14 import javax.swing.JLabel JavaDoc;
15 import javax.swing.JPanel JavaDoc;
16 import javax.swing.UIManager JavaDoc;
17 import javax.swing.border.Border JavaDoc;
18 import javax.swing.border.CompoundBorder JavaDoc;
19
20 import org.columba.api.gui.frame.IFrameMediator;
21 import org.columba.core.gui.search.api.IResultPanel;
22 import org.columba.core.search.ResultListenerAdapter;
23 import org.columba.core.search.api.IResultEvent;
24 import org.columba.core.search.api.ISearchCriteria;
25 import org.columba.core.search.api.ISearchManager;
26 import org.columba.core.search.api.ISearchProvider;
27 import org.jdesktop.swingx.JXCollapsiblePane;
28 import org.jdesktop.swingx.JXHyperlink;
29
30 public class SearchResultBox extends JPanel JavaDoc {
31
32     private final static Color JavaDoc borderColor2 = UIManager
33     .getColor("controlShadow");
34
35 private final static Color JavaDoc borderColor1 = UIManager
36     .getColor("controlHighlight");
37
38     private JXHyperlink link;
39
40     private JXHyperlink moreLink;
41
42     private JXCollapsiblePane collapsible;
43
44     private IResultPanel resultPanel;
45
46     private ISearchCriteria criteria;
47
48     private ISearchProvider searchProvider;
49
50     /**
51      *
52      * @param mediator
53      * @param p
54      * @param criteria
55      * can be <code>null</code>
56      * @param resultPanel
57      */

58     public SearchResultBox(final IFrameMediator mediator,
59             final ISearchProvider p, final ISearchCriteria criteria,
60             IResultPanel resultPanel) {
61         this.resultPanel = resultPanel;
62         this.criteria = criteria;
63         this.searchProvider = p;
64
65         collapsible = new JXCollapsiblePane();
66         //collapsible.getContentPane().setBackground(Color.WHITE);
67
collapsible.add(resultPanel.getView());
68
69         Action JavaDoc toggleAction = collapsible.getActionMap().get(
70                 JXCollapsiblePane.TOGGLE_ACTION);
71         // use the collapse/expand icons from the JTree UI
72
toggleAction.putValue(JXCollapsiblePane.COLLAPSE_ICON, UIManager
73                 .getIcon("Tree.expandedIcon"));
74         toggleAction.putValue(JXCollapsiblePane.EXPAND_ICON, UIManager
75                 .getIcon("Tree.collapsedIcon"));
76         link = new JXHyperlink(toggleAction);
77         if (criteria != null)
78             link.setText(criteria.getTitle());
79         else
80             link.setText(p.getName());
81
82         if (criteria != null)
83             link.setToolTipText(criteria.getDescription());
84         else
85             link.setToolTipText(p.getDescription());
86
87         // link.setFont(link.getFont().deriveFont(Font.BOLD));
88
link.setOpaque(true);
89         //link.setBackground(titleBackground);
90
link.setFocusPainted(false);
91
92         link.setUnclickedColor(UIManager.getColor("Label.foreground"));
93         link.setClickedColor(UIManager.getColor("Label.foreground"));
94
95         moreLink = new JXHyperlink();
96         moreLink.setEnabled(false);
97         moreLink.setText("Show More ..");
98         Font JavaDoc font = UIManager.getFont("Label.font");
99         Font JavaDoc smallFont = new Font JavaDoc(font.getName(), font.getStyle(), font
100                 .getSize() - 2);
101         moreLink.setFont(smallFont);
102         moreLink.addActionListener(new ActionListener JavaDoc() {
103             public void actionPerformed(ActionEvent JavaDoc e) {
104                 if ( criteria != null)
105                 p.showAllResults(mediator, "test", criteria.getTechnicalName());
106                 else
107                 p.showAllResults(mediator, "test", null);
108             }
109         });
110
111         setLayout(new BorderLayout JavaDoc());
112         JPanel JavaDoc top = new JPanel JavaDoc();
113         top.setOpaque(true);
114
115         Border JavaDoc border1 = new CompoundBorder JavaDoc(new SeparatorBorder(),
116                 BorderFactory.createEmptyBorder(2, 4, 2, 4));
117
118         Border JavaDoc border = new CompoundBorder JavaDoc(BorderFactory.createEmptyBorder(2,
119                 4, 2, 4), border1);
120
121         top.setBorder(border1);
122         //top.setBackground(titleBackground);
123
top.setLayout(new BorderLayout JavaDoc());
124         JLabel JavaDoc iconLabel = new JLabel JavaDoc();
125         //iconLabel.setBackground(titleBackground);
126
iconLabel.setIcon(p.getIcon());
127         iconLabel.setOpaque(true);
128         iconLabel.setBorder(BorderFactory.createEmptyBorder(1, 2, 1, 6));
129         top.add(iconLabel, BorderLayout.WEST);
130         top.add(link, BorderLayout.CENTER);
131         top.add(moreLink, BorderLayout.EAST);
132         add(top, BorderLayout.NORTH);
133         add(collapsible, BorderLayout.CENTER);
134     }
135
136     public void installListener(ISearchManager searchManager) {
137         searchManager.addResultListener(new MyResultListener());
138     }
139
140     class MyResultListener extends ResultListenerAdapter {
141         @Override JavaDoc
142         public void resultArrived(IResultEvent event) {
143             if (event.getProviderName() == null)
144                 return;
145
146             if (!event.getProviderName().equals(
147                     resultPanel.getProviderTechnicalName()))
148                 return;
149             if (event.getSearchCriteria() != null) {
150                 if (!event.getSearchCriteria().getTechnicalName().equals(
151                         resultPanel.getSearchCriteriaTechnicalName()))
152                     return;
153             }
154
155             if (criteria != null)
156                 link.setText(criteria.getTitle());
157             else
158                 link.setText(searchProvider.getName());
159
160             if (criteria != null)
161                 link.setToolTipText(criteria.getDescription());
162             else
163                 link.setToolTipText(searchProvider.getDescription());
164
165             if (event.getTotalResultCount() == 0) {
166                 moreLink.setText("Show More ..");
167                 moreLink.setEnabled(false);
168             } else {
169                 moreLink.setText("Show More" + " ("
170                         + event.getTotalResultCount() + ") ..");
171                 moreLink.setEnabled(true);
172             }
173
174             revalidate();
175         }
176
177         MyResultListener() {
178         }
179     }
180
181     /**
182      * The border between the stack components. It separates each component with
183      * a fine line border.
184      */

185     class SeparatorBorder implements Border JavaDoc {
186
187         boolean isFirst(Component JavaDoc c) {
188             return c.getParent() == null || c.getParent().getComponent(0) == c;
189         }
190
191         public Insets JavaDoc getBorderInsets(Component JavaDoc c) {
192             // if the collapsible is collapsed, we do not want its border to be
193
// painted.
194
if (c instanceof JXCollapsiblePane) {
195                 if (((JXCollapsiblePane) c).isCollapsed()) {
196                     return new Insets JavaDoc(0, 0, 0, 0);
197                 }
198             }
199             return new Insets JavaDoc(isFirst(c) ? 4 : 1, 0, 1, 0);
200         }
201
202         public boolean isBorderOpaque() {
203             return true;
204         }
205
206         public void paintBorder(Component JavaDoc c, Graphics JavaDoc g, int x, int y,
207                 int width, int height) {
208             g.setColor(borderColor1);
209             if (isFirst(c)) {
210                 g.drawLine(x, y + 2, x + width, y + 2);
211             }
212 // g.setColor(borderColor2);
213
// g.drawLine(x, y + height - 1, x + width, y + height - 1);
214
}
215     }
216
217 }
218
Popular Tags