KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > addressbook > gui > context > ContactDetailPanel


1 package org.columba.addressbook.gui.context;
2
3 import java.awt.Color JavaDoc;
4 import java.awt.Font JavaDoc;
5 import java.awt.Point JavaDoc;
6 import java.awt.event.ActionEvent JavaDoc;
7 import java.awt.event.ActionListener JavaDoc;
8 import java.awt.event.MouseAdapter JavaDoc;
9 import java.awt.event.MouseEvent JavaDoc;
10 import java.util.Iterator JavaDoc;
11
12 import javax.swing.BorderFactory JavaDoc;
13 import javax.swing.JLabel JavaDoc;
14 import javax.swing.JMenuItem JavaDoc;
15 import javax.swing.JPanel JavaDoc;
16 import javax.swing.JPopupMenu JavaDoc;
17 import javax.swing.UIManager JavaDoc;
18 import javax.swing.border.Border JavaDoc;
19
20 import org.columba.addressbook.facade.DialogFacade;
21 import org.columba.addressbook.model.IContactModel;
22 import org.columba.addressbook.model.PhoneModel;
23 import org.columba.api.exception.ServiceNotFoundException;
24 import org.columba.contact.search.ContactSearchResult;
25 import org.columba.core.facade.ServiceFacadeRegistry;
26 import org.columba.core.gui.base.RoundedBorder;
27 import org.columba.core.resourceloader.ImageLoader;
28 import org.columba.mail.facade.IDialogFacade;
29 import org.jdesktop.swingx.JXHyperlink;
30
31 import com.jgoodies.forms.factories.FormFactory;
32 import com.jgoodies.forms.layout.CellConstraints;
33 import com.jgoodies.forms.layout.ColumnSpec;
34 import com.jgoodies.forms.layout.FormLayout;
35 import com.jgoodies.forms.layout.RowSpec;
36
37 public class ContactDetailPanel extends JPanel JavaDoc {
38
39     private static final String JavaDoc NOT_AVAIL = "n/a";
40
41     private JLabel JavaDoc pictureLabel;
42
43     private JLabel JavaDoc label1;
44
45     private JXHyperlink label2;
46
47     private JXHyperlink label5;
48
49     private JLabel JavaDoc label9;
50
51     private JLabel JavaDoc label10;
52
53     private JLabel JavaDoc label12;
54
55     private JLabel JavaDoc label13;
56
57     private JLabel JavaDoc label4;
58
59     private JLabel JavaDoc label11;
60
61     private JLabel JavaDoc label7;
62
63     private JLabel JavaDoc label8;
64
65     private JPopupMenu JavaDoc contextMenu;
66
67     private final IContactModel model;
68
69     private final ContactSearchResult searchResult;
70
71     public ContactDetailPanel(final IContactModel model,
72             final ContactSearchResult searchResult) {
73         this.model = model;
74         this.searchResult = searchResult;
75
76         setBackground(UIManager.getColor("TextField.background"));
77
78         Border JavaDoc b = BorderFactory.createCompoundBorder(new RoundedBorder(
79                 new Color JavaDoc(220, 220, 220)), BorderFactory.createEmptyBorder(4,
80                 4, 4, 4));
81         Border JavaDoc b2 = BorderFactory.createCompoundBorder(BorderFactory
82                 .createEmptyBorder(4, 4, 4, 4), b);
83         setBorder(b2);
84
85         initComponents();
86
87         pictureLabel.setIcon(ImageLoader.getMiscIcon("malehead.png"));
88         pictureLabel.setHorizontalAlignment(JLabel.CENTER);
89         pictureLabel.setBorder(BorderFactory.createCompoundBorder(
90                 new RoundedBorder(new Color JavaDoc(220, 220, 220)), BorderFactory
91                         .createEmptyBorder(4, 4, 4, 4)));
92
93         if (model.getFormattedName() != null)
94             label1.setText(model.getFormattedName());
95         else
96             label1.setText(NOT_AVAIL);
97
98         label1.setFont(label1.getFont().deriveFont(Font.BOLD));
99         if (model.getPreferredEmail() != null) {
100             label2.setText(model.getPreferredEmail());
101             label2.addActionListener(new ActionListener JavaDoc() {
102                 public void actionPerformed(ActionEvent JavaDoc event) {
103                     try {
104                         IDialogFacade facade = (IDialogFacade) ServiceFacadeRegistry
105                                 .getInstance()
106                                 .getService(
107                                         org.columba.mail.facade.IDialogFacade.class);
108                         facade.openComposer(model.getPreferredEmail());
109                     } catch (ServiceNotFoundException e) {
110                         e.printStackTrace();
111                     }
112                 }
113             });
114         } else
115             label2.setText(NOT_AVAIL);
116         if (model.getHomePage() != null)
117             label5.setText(model.getHomePage());
118         else
119             label5.setText(NOT_AVAIL);
120
121         label9.setText("Birthday:");
122         if (model.getBirthday() != null)
123             label10.setText(model.getBirthday().toLocaleString());
124         else
125             label10.setText(NOT_AVAIL);
126
127         label12.setText("Phone Home:");
128         label4.setText("Phone Work:");
129         label11.setText(NOT_AVAIL);
130         label13.setText(NOT_AVAIL);
131         Iterator JavaDoc it = model.getPhoneIterator();
132         while (it.hasNext()) {
133             PhoneModel phoneModel = (PhoneModel) it.next();
134             if (phoneModel.getType() == PhoneModel.TYPE_HOME_PHONE)
135                 label13.setText(phoneModel.getNumber());
136             if (phoneModel.getType() == PhoneModel.TYPE_BUSINESS_PHONE)
137                 label11.setText(phoneModel.getNumber());
138         }
139         if (model.getPreferredInstantMessaging() != null)
140             label7.setText(model.getPreferredInstantMessaging() + ":");
141         else
142             label7.setText("No IM available");
143
144         // TODO: real IM status here
145
label8.setText(NOT_AVAIL);
146
147         addMouseListener(new MyMouseListener());
148     }
149
150     private void initComponents() {
151         pictureLabel = new JLabel JavaDoc();
152         label1 = new JLabel JavaDoc();
153         label2 = new JXHyperlink();
154         label5 = new JXHyperlink();
155         label9 = new JLabel JavaDoc();
156         label10 = new JLabel JavaDoc();
157         label12 = new JLabel JavaDoc();
158         label13 = new JLabel JavaDoc();
159         label4 = new JLabel JavaDoc();
160         label11 = new JLabel JavaDoc();
161         label7 = new JLabel JavaDoc();
162         label8 = new JLabel JavaDoc();
163
164         CellConstraints cc = new CellConstraints();
165
166         // ======== this ========
167
setLayout(new FormLayout(new ColumnSpec[] {
168                 FormFactory.DEFAULT_COLSPEC,
169                 FormFactory.LABEL_COMPONENT_GAP_COLSPEC,
170                 FormFactory.DEFAULT_COLSPEC }, new RowSpec[] {
171                 FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
172                 FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
173                 FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
174                 FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
175                 FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
176                 FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
177                 FormFactory.DEFAULT_ROWSPEC, FormFactory.LINE_GAP_ROWSPEC,
178                 FormFactory.DEFAULT_ROWSPEC }));
179         add(pictureLabel, cc.xywh(1, 1, 1, 7, CellConstraints.FILL,
180                 CellConstraints.FILL));
181
182         add(label1, cc.xy(3, 1));
183
184         add(label2, cc.xy(3, 3));
185
186         add(label5, cc.xy(3, 5));
187
188         add(label9, cc.xywh(1, 9, 1, 1, CellConstraints.RIGHT,
189                 CellConstraints.DEFAULT));
190
191         add(label10, cc.xywh(3, 9, 1, 1, CellConstraints.FILL,
192                 CellConstraints.DEFAULT));
193
194         add(label12, cc.xywh(1, 11, 1, 1, CellConstraints.RIGHT,
195                 CellConstraints.DEFAULT));
196
197         add(label13, cc.xywh(3, 11, 1, 1, CellConstraints.FILL,
198                 CellConstraints.DEFAULT));
199
200         add(label4, cc.xywh(1, 13, 1, 1, CellConstraints.RIGHT,
201                 CellConstraints.DEFAULT));
202
203         add(label11, cc.xywh(3, 13, 1, 1, CellConstraints.FILL,
204                 CellConstraints.DEFAULT));
205
206         add(label7, cc.xywh(1, 15, 1, 1, CellConstraints.RIGHT,
207                 CellConstraints.DEFAULT));
208
209         add(label8, cc.xywh(3, 15, 1, 1, CellConstraints.FILL,
210                 CellConstraints.DEFAULT));
211     }
212
213     private JPopupMenu JavaDoc getPopupMenu() {
214         if (contextMenu != null)
215             return contextMenu;
216
217         contextMenu = new JPopupMenu JavaDoc();
218
219         JMenuItem JavaDoc item = new JMenuItem JavaDoc("Open..");
220         item.addActionListener(new ActionListener JavaDoc() {
221             public void actionPerformed(ActionEvent JavaDoc event) {
222                 new DialogFacade()
223                         .openContactDialog(searchResult.getLocation());
224             }
225         });
226         contextMenu.add(item);
227
228         item = new JMenuItem JavaDoc("Compose Message..");
229         item.addActionListener(new ActionListener JavaDoc() {
230             public void actionPerformed(ActionEvent JavaDoc event) {
231
232                 String JavaDoc address = model.getPreferredEmail();
233
234                 try {
235                     IDialogFacade facade = (IDialogFacade) ServiceFacadeRegistry
236                             .getInstance()
237                             .getService(
238                                     org.columba.mail.facade.IDialogFacade.class);
239                     facade.openComposer(address);
240                 } catch (ServiceNotFoundException e) {
241                     e.printStackTrace();
242                 }
243             }
244         });
245
246         contextMenu.add(item);
247         return contextMenu;
248     }
249
250     class MyMouseListener extends MouseAdapter JavaDoc {
251
252         @Override JavaDoc
253         public void mouseClicked(MouseEvent JavaDoc e) {
254             handleEvent(e);
255         }
256
257         @Override JavaDoc
258         public void mousePressed(MouseEvent JavaDoc e) {
259             handlePopupEvent(e);
260         }
261
262         @Override JavaDoc
263         public void mouseReleased(MouseEvent JavaDoc e) {
264             handlePopupEvent(e);
265         }
266
267         /**
268          * @param e
269          */

270         private void handlePopupEvent(MouseEvent JavaDoc e) {
271             Point JavaDoc p = e.getPoint();
272             if (e.isPopupTrigger()) {
273                 // show context menu
274
getPopupMenu().show(e.getComponent(), p.x, p.y);
275             }
276         }
277
278         /**
279          * @param e
280          */

281         private void handleEvent(MouseEvent JavaDoc e) {
282         }
283     }
284
285 }
286
Popular Tags