1 package org.columba.addressbook.gui.context; 2 3 import java.awt.Color ; 4 import java.awt.Font ; 5 import java.awt.Point ; 6 import java.awt.event.ActionEvent ; 7 import java.awt.event.ActionListener ; 8 import java.awt.event.MouseAdapter ; 9 import java.awt.event.MouseEvent ; 10 import java.util.Iterator ; 11 12 import javax.swing.BorderFactory ; 13 import javax.swing.JLabel ; 14 import javax.swing.JMenuItem ; 15 import javax.swing.JPanel ; 16 import javax.swing.JPopupMenu ; 17 import javax.swing.UIManager ; 18 import javax.swing.border.Border ; 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 { 38 39 private static final String NOT_AVAIL = "n/a"; 40 41 private JLabel pictureLabel; 42 43 private JLabel label1; 44 45 private JXHyperlink label2; 46 47 private JXHyperlink label5; 48 49 private JLabel label9; 50 51 private JLabel label10; 52 53 private JLabel label12; 54 55 private JLabel label13; 56 57 private JLabel label4; 58 59 private JLabel label11; 60 61 private JLabel label7; 62 63 private JLabel label8; 64 65 private JPopupMenu 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 b = BorderFactory.createCompoundBorder(new RoundedBorder( 79 new Color (220, 220, 220)), BorderFactory.createEmptyBorder(4, 80 4, 4, 4)); 81 Border 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 (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 () { 102 public void actionPerformed(ActionEvent 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 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 label8.setText(NOT_AVAIL); 146 147 addMouseListener(new MyMouseListener()); 148 } 149 150 private void initComponents() { 151 pictureLabel = new JLabel (); 152 label1 = new JLabel (); 153 label2 = new JXHyperlink(); 154 label5 = new JXHyperlink(); 155 label9 = new JLabel (); 156 label10 = new JLabel (); 157 label12 = new JLabel (); 158 label13 = new JLabel (); 159 label4 = new JLabel (); 160 label11 = new JLabel (); 161 label7 = new JLabel (); 162 label8 = new JLabel (); 163 164 CellConstraints cc = new CellConstraints(); 165 166 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 getPopupMenu() { 214 if (contextMenu != null) 215 return contextMenu; 216 217 contextMenu = new JPopupMenu (); 218 219 JMenuItem item = new JMenuItem ("Open.."); 220 item.addActionListener(new ActionListener () { 221 public void actionPerformed(ActionEvent event) { 222 new DialogFacade() 223 .openContactDialog(searchResult.getLocation()); 224 } 225 }); 226 contextMenu.add(item); 227 228 item = new JMenuItem ("Compose Message.."); 229 item.addActionListener(new ActionListener () { 230 public void actionPerformed(ActionEvent event) { 231 232 String 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 { 251 252 @Override 253 public void mouseClicked(MouseEvent e) { 254 handleEvent(e); 255 } 256 257 @Override 258 public void mousePressed(MouseEvent e) { 259 handlePopupEvent(e); 260 } 261 262 @Override 263 public void mouseReleased(MouseEvent e) { 264 handlePopupEvent(e); 265 } 266 267 270 private void handlePopupEvent(MouseEvent e) { 271 Point p = e.getPoint(); 272 if (e.isPopupTrigger()) { 273 getPopupMenu().show(e.getComponent(), p.x, p.y); 275 } 276 } 277 278 281 private void handleEvent(MouseEvent e) { 282 } 283 } 284 285 } 286 | Popular Tags |