1 package org.columba.contact.gui.box; 2 3 import java.awt.BorderLayout ; 4 import java.awt.Point ; 5 import java.awt.event.ActionEvent ; 6 import java.awt.event.ActionListener ; 7 import java.awt.event.MouseAdapter ; 8 import java.awt.event.MouseEvent ; 9 import java.util.List ; 10 11 import javax.swing.BorderFactory ; 12 import javax.swing.ImageIcon ; 13 import javax.swing.JComponent ; 14 import javax.swing.JLabel ; 15 import javax.swing.JMenuItem ; 16 import javax.swing.JPanel ; 17 import javax.swing.JPopupMenu ; 18 import javax.swing.JScrollPane ; 19 20 import org.columba.addressbook.folder.IContactFolder; 21 import org.columba.addressbook.gui.dialog.contact.ContactEditorDialog; 22 import org.columba.addressbook.gui.tree.AddressbookTreeModel; 23 import org.columba.addressbook.model.IContactModel; 24 import org.columba.addressbook.model.IContactModelPartial; 25 import org.columba.api.exception.ServiceNotFoundException; 26 import org.columba.api.gui.frame.IContainer; 27 import org.columba.api.gui.frame.IFrameMediator; 28 import org.columba.core.facade.ServiceFacadeRegistry; 29 import org.columba.core.gui.base.DoubleClickListener; 30 import org.columba.core.gui.base.IconTextField; 31 import org.columba.core.gui.dialog.ErrorDialog; 32 import org.columba.core.gui.frame.FrameManager; 33 import org.columba.core.gui.frame.api.IComponentBox; 34 import org.columba.core.logging.Logging; 35 import org.columba.core.resourceloader.IconKeys; 36 import org.columba.core.resourceloader.ImageLoader; 37 import org.columba.mail.facade.IDialogFacade; 38 39 import com.jgoodies.forms.builder.DefaultFormBuilder; 40 import com.jgoodies.forms.layout.FormLayout; 41 42 public class ContactBox extends JPanel implements IComponentBox { 43 44 private final static ImageIcon icon = ImageLoader 45 .getSmallIcon(IconKeys.EDIT_FIND); 46 47 private ContactList list; 48 49 private IconTextField textField; 50 51 private JLabel label; 52 53 private IContactFolder selectedFolder; 54 55 private JPopupMenu contextMenu; 56 57 public ContactBox() { 58 59 setLayout(new BorderLayout ()); 60 61 label = new JLabel ("Quick Find:"); 62 label.setDisplayedMnemonic('F'); 63 textField = new IconTextField(icon, 10); 64 label.setLabelFor(textField); 65 66 AddressbookTreeModel model = AddressbookTreeModel.getInstance(); 67 selectedFolder = (IContactFolder) model.getFolder("101"); 68 69 list = new ContactList(); 70 list.setModel(new FilteringModel()); 71 list.addAll(selectedFolder.getHeaderItemList()); 72 73 FolderListMenu popup = new FolderListMenu(new ActionListener () { 74 public void actionPerformed(ActionEvent event) { 75 String id = event.getActionCommand(); 76 AddressbookTreeModel model = AddressbookTreeModel.getInstance(); 77 selectedFolder = (IContactFolder) model.getFolder(id); 78 List <IContactModelPartial> contactList = selectedFolder 79 .getHeaderItemList(); 80 list.setModel(new FilteringModel()); 81 list.addAll(contactList); 82 list.installJTextField(textField); 83 textField.setText(textField.getText()); 84 } 85 }); 86 textField.setPopupMenu(popup); 87 88 list.installJTextField(textField); 89 90 list.addMouseListener(new DoubleClickListener() { 91 92 @Override 93 public void doubleClick(MouseEvent event) { 94 IContactModelPartial selected = (IContactModelPartial) list 95 .getSelectedValue(); 96 openEditContactDialog(selected); 97 } 98 }); 99 100 list.add(getPopupMenu()); 101 list.addMouseListener(new MyMouseListener()); 102 103 105 JPanel p = new JPanel (); 106 p.setBorder(BorderFactory.createEmptyBorder(0, 4, 4, 4)); 107 FormLayout layout = new FormLayout("pref, 2dlu, fill:default:grow", 108 "fill:default:grow"); 110 111 DefaultFormBuilder builder = new DefaultFormBuilder(layout, p); 113 builder.append(label); 114 builder.append(textField); 115 add(p, BorderLayout.NORTH); 116 117 JScrollPane scrollPane = new JScrollPane (list); 118 add(scrollPane, BorderLayout.CENTER); 120 } 121 122 private JPopupMenu getPopupMenu() { 123 if (contextMenu != null) 124 return contextMenu; 125 126 contextMenu = new JPopupMenu (); 127 128 JMenuItem item = new JMenuItem ("Open.."); 129 item.addActionListener(new ActionListener () { 130 public void actionPerformed(ActionEvent event) { 131 IContactModelPartial selected = (IContactModelPartial) list 132 .getSelectedValue(); 133 openEditContactDialog(selected); 134 } 135 }); 136 contextMenu.add(item); 137 138 item = new JMenuItem ("Compose Message.."); 139 item.addActionListener(new ActionListener () { 140 public void actionPerformed(ActionEvent event) { 141 IContactModelPartial selected = (IContactModelPartial) list 142 .getSelectedValue(); 143 String address = selected.getAddress(); 144 145 try { 146 IDialogFacade facade = (IDialogFacade) ServiceFacadeRegistry 147 .getInstance() 148 .getService( 149 org.columba.mail.facade.IDialogFacade.class); 150 facade.openComposer(address); 151 } catch (ServiceNotFoundException e) { 152 e.printStackTrace(); 153 } 154 } 155 }); 156 157 contextMenu.add(item); 158 return contextMenu; 159 } 160 161 165 166 public String getDescription() { 167 return "Contacts"; 168 } 169 170 public ImageIcon getIcon() { 171 return ImageLoader.getSmallIcon(IconKeys.ADDRESSBOOK); 172 } 173 174 public String getName() { 175 return "Contacts"; 176 } 177 178 public String getTechnicalName() { 179 return "contact_list"; 180 } 181 182 public JComponent getView() { 183 return this; 184 } 185 186 private void openEditContactDialog(IContactModelPartial selected) { 187 188 IContactModel card = null; 189 try { 190 card = (IContactModel) selectedFolder.get(selected.getId()); 191 } catch (Exception e) { 192 if (Logging.DEBUG) 193 e.printStackTrace(); 194 ErrorDialog.createDialog(e.getMessage(), e); 195 } 196 197 IContainer[] container = FrameManager.getInstance().getOpenFrames(); 198 if (container == null || container.length == 0) 199 throw new RuntimeException ("No frames available"); 200 201 IFrameMediator frameMediator = container[0].getFrameMediator(); 202 203 ContactEditorDialog dialog = new ContactEditorDialog(frameMediator 204 .getView().getFrame(), card); 205 206 if (dialog.getResult()) { 207 208 try { 209 selectedFolder.modify(selected.getId(), dialog.getDestModel()); 211 } catch (Exception e1) { 212 if (Logging.DEBUG) 213 e1.printStackTrace(); 214 215 ErrorDialog.createDialog(e1.getMessage(), e1); 216 } 217 218 } 219 } 220 221 class MyMouseListener extends MouseAdapter { 222 223 @Override 224 public void mouseClicked(MouseEvent e) { 225 handleEvent(e); 226 } 227 228 @Override 229 public void mousePressed(MouseEvent e) { 230 handlePopupEvent(e); 231 } 232 233 @Override 234 public void mouseReleased(MouseEvent e) { 235 handlePopupEvent(e); 236 } 237 238 241 private void handlePopupEvent(MouseEvent e) { 242 Point p = e.getPoint(); 243 if (e.isPopupTrigger()) { 244 if (list.getSelectedIndices().length <= 1) { 246 int index = list.locationToIndex(p); 248 list.setSelectedIndex(index); 249 } 250 getPopupMenu().show(e.getComponent(), p.x, p.y); 252 } 253 } 254 255 258 private void handleEvent(MouseEvent e) { 259 } 260 } 261 262 } 263 | Popular Tags |