KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > contact > gui > box > ContactBox


1 package org.columba.contact.gui.box;
2
3 import java.awt.BorderLayout JavaDoc;
4 import java.awt.Point JavaDoc;
5 import java.awt.event.ActionEvent JavaDoc;
6 import java.awt.event.ActionListener JavaDoc;
7 import java.awt.event.MouseAdapter JavaDoc;
8 import java.awt.event.MouseEvent JavaDoc;
9 import java.util.List JavaDoc;
10
11 import javax.swing.BorderFactory JavaDoc;
12 import javax.swing.ImageIcon JavaDoc;
13 import javax.swing.JComponent JavaDoc;
14 import javax.swing.JLabel JavaDoc;
15 import javax.swing.JMenuItem JavaDoc;
16 import javax.swing.JPanel JavaDoc;
17 import javax.swing.JPopupMenu JavaDoc;
18 import javax.swing.JScrollPane JavaDoc;
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 JavaDoc implements IComponentBox {
43
44     private final static ImageIcon JavaDoc icon = ImageLoader
45             .getSmallIcon(IconKeys.EDIT_FIND);
46
47     private ContactList list;
48
49     private IconTextField textField;
50
51     private JLabel JavaDoc label;
52
53     private IContactFolder selectedFolder;
54
55     private JPopupMenu JavaDoc contextMenu;
56
57     public ContactBox() {
58
59         setLayout(new BorderLayout JavaDoc());
60
61         label = new JLabel JavaDoc("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 JavaDoc() {
74             public void actionPerformed(ActionEvent JavaDoc event) {
75                 String JavaDoc id = event.getActionCommand();
76                 AddressbookTreeModel model = AddressbookTreeModel.getInstance();
77                 selectedFolder = (IContactFolder) model.getFolder(id);
78                 List JavaDoc<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 JavaDoc
93             public void doubleClick(MouseEvent JavaDoc 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         //setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
104

105         JPanel JavaDoc p = new JPanel JavaDoc();
106         p.setBorder(BorderFactory.createEmptyBorder(0, 4, 4, 4));
107         FormLayout layout = new FormLayout("pref, 2dlu, fill:default:grow",
108         // 2 columns
109
"fill:default:grow");
110
111         // create a form builder
112
DefaultFormBuilder builder = new DefaultFormBuilder(layout, p);
113         builder.append(label);
114         builder.append(textField);
115         add(p, BorderLayout.NORTH);
116
117         JScrollPane JavaDoc scrollPane = new JScrollPane JavaDoc(list);
118         //scrollPane.setBorder(null);
119
add(scrollPane, BorderLayout.CENTER);
120     }
121
122     private JPopupMenu JavaDoc getPopupMenu() {
123         if (contextMenu != null)
124             return contextMenu;
125
126         contextMenu = new JPopupMenu JavaDoc();
127
128         JMenuItem JavaDoc item = new JMenuItem JavaDoc("Open..");
129         item.addActionListener(new ActionListener JavaDoc() {
130             public void actionPerformed(ActionEvent JavaDoc event) {
131                 IContactModelPartial selected = (IContactModelPartial) list
132                         .getSelectedValue();
133                 openEditContactDialog(selected);
134             }
135         });
136         contextMenu.add(item);
137
138         item = new JMenuItem JavaDoc("Compose Message..");
139         item.addActionListener(new ActionListener JavaDoc() {
140             public void actionPerformed(ActionEvent JavaDoc event) {
141                 IContactModelPartial selected = (IContactModelPartial) list
142                         .getSelectedValue();
143                 String JavaDoc 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     /**
162      * *************** IComponentBox implementation
163      * *******************************
164      */

165
166     public String JavaDoc getDescription() {
167         return "Contacts";
168     }
169
170     public ImageIcon JavaDoc getIcon() {
171         return ImageLoader.getSmallIcon(IconKeys.ADDRESSBOOK);
172     }
173
174     public String JavaDoc getName() {
175         return "Contacts";
176     }
177
178     public String JavaDoc getTechnicalName() {
179         return "contact_list";
180     }
181
182     public JComponent JavaDoc 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 JavaDoc 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 JavaDoc("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                 // modify card properties in folder
210
selectedFolder.modify(selected.getId(), dialog.getDestModel());
211             } catch (Exception JavaDoc 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 JavaDoc {
222
223         @Override JavaDoc
224         public void mouseClicked(MouseEvent JavaDoc e) {
225             handleEvent(e);
226         }
227
228         @Override JavaDoc
229         public void mousePressed(MouseEvent JavaDoc e) {
230             handlePopupEvent(e);
231         }
232
233         @Override JavaDoc
234         public void mouseReleased(MouseEvent JavaDoc e) {
235             handlePopupEvent(e);
236         }
237
238         /**
239          * @param e
240          */

241         private void handlePopupEvent(MouseEvent JavaDoc e) {
242             Point JavaDoc p = e.getPoint();
243             if (e.isPopupTrigger()) {
244                 // check if a single entry is selected
245
if (list.getSelectedIndices().length <= 1) {
246                     // select new item
247
int index = list.locationToIndex(p);
248                     list.setSelectedIndex(index);
249                 }
250                 // show context menu
251
getPopupMenu().show(e.getComponent(), p.x, p.y);
252             }
253         }
254
255         /**
256          * @param e
257          */

258         private void handleEvent(MouseEvent JavaDoc e) {
259         }
260     }
261
262 }
263
Popular Tags