KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > sellwin > gui > ContactsPanel


1 package sellwin.gui;
2
3 import sellwin.domain.*;
4 import sellwin.utils.*;
5
6 import javax.swing.*;
7 import javax.swing.event.*;
8 import javax.swing.border.*;
9 import java.awt.*;
10 import java.awt.event.*;
11 import java.util.*;
12
13 // SellWin http://sourceforge.net/projects/sellwincrm
14
//Contact support@open-app.com for commercial help with SellWin
15
//This software is provided "AS IS", without a warranty of any kind.
16

17 /**
18  * This class implements the Contacts panel that users
19  * see from the Contacts tab on the MainWindow (GUI).
20  */

21 public class ContactsPanel extends JPanel implements GUIChars {
22     private Whiteboard wb = null;
23     private Opportunity currentOpp = null;
24     private ContactsPanel thisPanel = null;
25     private JPopupMenu popup = new JPopupMenu();
26
27     private javax.swing.JPanel JavaDoc buttonPanel;
28     private javax.swing.JMenuItem JavaDoc deleteMenuItem;
29     private javax.swing.JButton JavaDoc addButton;
30     private javax.swing.JButton JavaDoc applyButton;
31     private final javax.swing.JPanel JavaDoc mainPanel = new JPanel();
32     private javax.swing.JLabel JavaDoc contactsLabel;
33     private AddressPanel addressPanel = new AddressPanel();
34     private javax.swing.JScrollPane JavaDoc jScrollPane1;
35     private javax.swing.JList JavaDoc contactsList;
36     private javax.swing.JComboBox JavaDoc stateCombo;
37     private javax.swing.JTextField JavaDoc miField;
38     private javax.swing.JTextField JavaDoc firstNameField;
39
40     /**
41      * construct the contacts panel, initialize it
42      */

43     public ContactsPanel() {
44         super();
45
46         thisPanel = this;
47
48         wb = MainWindow.getWhiteboard();
49         initComponents();
50
51         setFonts();
52         setColors();
53         setLang();
54
55         applyButton.addActionListener(
56             new ActionListener() {
57                 public void actionPerformed(ActionEvent e) {
58                     Contact c = getContactFromScreen();
59
60                     Contact existingContact;
61
62                     int index = contactsList.getSelectedIndex();
63
64                     if (index >= 0) {
65                         ArrayList contacts = wb.getCurrentOpportunity().getContacts();
66                         existingContact = (Contact)(contacts.get(index));
67                     } else {
68                         JOptionPane.showMessageDialog(thisPanel,
69                                 "Select a contact first.", "Error",
70                                 JOptionPane.ERROR_MESSAGE);
71                         return;
72                     }
73
74                     try {
75     
76                         if (existingContact != null) {
77                             Contact.copyFields(existingContact, c);
78                             wb.updateContact(existingContact);
79                             refreshOpportunity(); //useful when the name chgs
80
JOptionPane.showMessageDialog(thisPanel,
81                                 "Success", "Contact Updated",
82                                 JOptionPane.INFORMATION_MESSAGE);
83                         }
84                     } catch (Exception JavaDoc x) {
85                         ErrorHandler.show(thisPanel, x);
86                     }
87                 }
88             }
89         );
90
91         addButton.addActionListener(
92             new ActionListener() {
93                 public void actionPerformed(ActionEvent e) {
94                     try {
95                         Opportunity opp = wb.getCurrentOpportunity();
96                         if (opp == null) {
97                             JOptionPane.showMessageDialog(thisPanel,
98                                 wb.getLang().getString("selectOpp"),
99                                 wb.getLang().getString("error"),
100                                 JOptionPane.INFORMATION_MESSAGE);
101                             return;
102                         }
103                         Contact c = getContactFromScreen();
104                         wb.addContact(c);
105                         currentOpp.addContact(c);
106                         refreshOpportunity();
107                         JOptionPane.showMessageDialog(thisPanel,
108                                 wb.getLang().getString("contactAdded"),
109                                 wb.getLang().getString("success"),
110                                 JOptionPane.INFORMATION_MESSAGE);
111                         addressPanel.clear();
112                     } catch (AngError x) {
113                         ErrorHandler.show(thisPanel, x);
114                     }
115                 }
116             }
117         );
118
119         deleteMenuItem.addActionListener(
120             new ActionListener() {
121                 public void actionPerformed(ActionEvent e) {
122                     try {
123                         int index = contactsList.getSelectedIndex();
124                         if (index >= 0) {
125                             ArrayList contacts = wb.getCurrentOpportunity().getContacts();
126                             Contact currentContact = (Contact)(contacts.get(index));
127                             wb.deleteContact(currentContact.getPK());
128                             contacts.remove(index);
129                             refreshOpportunity();
130                         }
131                     } catch (Exception JavaDoc f) {
132                         ErrorHandler.show(thisPanel, f);
133                     }
134                 }
135             }
136         );
137
138
139
140         contactsList.addMouseListener(
141             new MouseAdapter() {
142                 public void mousePressed(MouseEvent e) {
143                     if (e.isPopupTrigger())
144                         popup.show(contactsList, e.getX(), e.getY());
145                 }
146
147                 public void mouseReleased(MouseEvent e) {
148                     if (e.isPopupTrigger())
149                         popup.show(contactsList, e.getX(), e.getY());
150                 }
151
152                 public void mouseClicked(MouseEvent e) {
153                     if (e.isPopupTrigger()) {
154                         popup.show(contactsList, e.getX(), e.getY());
155                         return;
156                     }
157                     
158                 
159                     switch (e.getClickCount()) {
160                         case 1:
161                             int index = contactsList.getSelectedIndex();
162                             if (index < 0) return;
163                             ArrayList contacts = wb.getCurrentOpportunity().getContacts();
164                             Contact x = (Contact)(contacts.get(index));
165                             if (x != null)
166                                 displayContact(x);
167                             else
168                                 System.out.println("invalid contact lookup");
169                             break;
170                         default:
171                             break;
172                     }
173                 }
174             }
175         );
176
177         createPopup(this);
178     }
179
180     /**
181      * create a popup menu that is displayed over the table
182      * @param c the component we are adding this popup to
183      */

184     private final void createPopup(Component c) {
185         popup.add(deleteMenuItem);
186
187         c.addMouseListener(new MouseAdapter() {
188             public void mousePressed(MouseEvent e) {
189                 if (e.isPopupTrigger())
190                     popup.show(mainPanel, e.getX(), e.getY());
191             }
192
193             public void mouseClicked(MouseEvent e) {
194                 if (e.isPopupTrigger())
195                     popup.show(mainPanel, e.getX(), e.getY());
196             }
197
198             public void mouseReleased(MouseEvent e) {
199                 if (e.isPopupTrigger())
200                     popup.show(mainPanel, e.getX(), e.getY());
201             }
202         });
203     }
204
205     /**
206      * display a Contact in this panel
207      * @param x the Contact to display
208      */

209     public final void displayContact(Contact x) {
210         clearContact();
211         addressPanel.setAddress(x.getAddress());
212     }
213
214     /**
215      * clear the Contact panel
216      */

217     public final void clearContact() {
218         Component[] children = getComponents();
219         for (int i=0;i<children.length;i++) {
220             if (children[i] instanceof JTextField)
221                 ((JTextField)children[i]).setText("");
222         }
223     }
224
225     /**
226      * get the Contact from the screen's fields
227      * @return the Contact
228      */

229     public final Contact getContactFromScreen() {
230         Address c = addressPanel.getAddress();
231         Contact contact = new Contact();
232         contact.setAddress(c);
233         return contact;
234     }
235
236     /**
237      * refresh the screen with another opportunity's values
238      */

239     public final void refreshOpportunity() {
240         currentOpp = wb.getCurrentOpportunity();
241         DefaultListModel mod = new DefaultListModel();
242         ArrayList contacts = currentOpp.getContacts();
243
244         Contact contact = null;
245         for (int i=0;i<contacts.size();i++) {
246             contact = (Contact)(contacts.get(i));
247             mod.addElement(contact.getAddress().getFormattedName());
248         }
249
250         contactsList.setModel(mod);
251
252         if (contacts.size() > 0) {
253             contactsList.setSelectedIndex(0);
254             displayContact((Contact)contacts.get(0));
255         }
256     }
257
258     /**
259      * set the screen colors
260      */

261     public final void setColors() {
262         contactsLabel.setForeground(MainWindow.LETTERS);
263     }
264
265     /**
266      * set the screen's fonts
267      */

268     public final void setFonts() {
269         contactsLabel.setFont(MainWindow.LABEL_FONT);
270         contactsList.setFont(MainWindow.FIELD_FONT);
271         addButton.setFont(MainWindow.LABEL_FONT);
272         deleteMenuItem.setFont(MainWindow.LABEL_FONT);
273         applyButton.setFont(MainWindow.LABEL_FONT);
274     }
275
276     /**
277      * initialize or build the screen's fields
278      */

279     private final void initComponents() {
280         buttonPanel = new JPanel();
281         addButton = new JButton();
282         deleteMenuItem = new JMenuItem();
283         applyButton = new JButton();
284         contactsLabel = new JLabel();
285         jScrollPane1 = new JScrollPane();
286         contactsList = new JList();
287         
288         setLayout(new java.awt.BorderLayout JavaDoc());
289         
290         
291         deleteMenuItem.setText("Delete");
292         
293         addButton.setText("Add");
294         applyButton.setText("Apply");
295         buttonPanel.add(addButton);
296         buttonPanel.add(applyButton);
297         
298         add(buttonPanel, java.awt.BorderLayout.SOUTH);
299         
300         mainPanel.setLayout(new java.awt.GridBagLayout JavaDoc());
301         java.awt.GridBagConstraints JavaDoc gridBagConstraints1;
302         
303         mainPanel.setBorder(new javax.swing.border.EtchedBorder JavaDoc());
304        
305         jScrollPane1.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
306         jScrollPane1.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
307         jScrollPane1.setMinimumSize(new Dimension(300, 100));
308         jScrollPane1.setViewportView(contactsList);
309         
310         gridBagConstraints1 = new java.awt.GridBagConstraints JavaDoc();
311         gridBagConstraints1.gridwidth = 3;
312         gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL;
313         gridBagConstraints1.insets = new Insets(Prefs.I_TOP,Prefs.I_LF,Prefs.I_BOTT,Prefs.I_RT);
314         gridBagConstraints1.gridx = 1;
315         gridBagConstraints1.gridy = 0;
316         mainPanel.add(jScrollPane1, gridBagConstraints1);
317
318         addressPanel.setBorder(new TitledBorder("Contact Address"));
319         gridBagConstraints1 = new java.awt.GridBagConstraints JavaDoc();
320         gridBagConstraints1.gridx = 1;
321         gridBagConstraints1.gridy = 1;
322         mainPanel.add(addressPanel, gridBagConstraints1);
323         
324         add(mainPanel, java.awt.BorderLayout.CENTER);
325         
326     }
327
328     /**
329      * see if the contact on the screen already exists, this tells us
330      * whether to do an 'update' or an 'add' of the contact info
331      * @param c the Contact we are checking for
332      * @return the Contact that was found in the current list
333      */

334     private final Contact checkInList(Contact c) {
335         ArrayList contacts = wb.getCurrentOpportunity().getContacts();
336         Contact contact = null;
337         for (int i=0;i<contacts.size();i++) {
338             contact = (Contact)(contacts.get(i));
339             if (contact.getAddress().getFormattedName().equals( c.getAddress().getFormattedName())) {
340                 return contact;
341             }
342         }
343         return null;
344     }
345
346     /**
347      * clear all the screen components
348      */

349     public final void clearOpportunity() {
350         DefaultListModel mod = new DefaultListModel();
351         contactsList.setModel(mod);
352     }
353
354     /**
355      * set the screen's text to some language
356      */

357     public final void setLang() {
358         addButton.setText(wb.getLang().getString("add"));
359         deleteMenuItem.setText(wb.getLang().getString("delete"));
360         applyButton.setText(wb.getLang().getString("apply"));
361         addressPanel.setBorder(
362             new TitledBorder(
363                 null,
364                 wb.getLang().getString("contactAddress"),
365                 TitledBorder.DEFAULT_JUSTIFICATION,
366                 TitledBorder.DEFAULT_POSITION,
367                 MainWindow.LABEL_FONT,
368                 MainWindow.LETTERS
369             )
370         );
371     }
372 }
373
Popular Tags