1 package org.columba.addressbook.gui.dialog.group; 19 20 import java.awt.BorderLayout ; 21 import java.awt.Dimension ; 22 import java.awt.GridLayout ; 23 import java.awt.event.ActionEvent ; 24 import java.awt.event.ActionListener ; 25 import java.awt.event.KeyEvent ; 26 import java.awt.event.KeyListener ; 27 import java.util.Map ; 28 29 import javax.swing.BorderFactory ; 30 import javax.swing.JButton ; 31 import javax.swing.JComponent ; 32 import javax.swing.JDialog ; 33 import javax.swing.JFrame ; 34 import javax.swing.JLabel ; 35 import javax.swing.JOptionPane ; 36 import javax.swing.JPanel ; 37 import javax.swing.JScrollPane ; 38 import javax.swing.JTextField ; 39 import javax.swing.KeyStroke ; 40 import javax.swing.SwingConstants ; 41 import javax.swing.text.JTextComponent ; 42 43 import org.columba.addressbook.folder.AbstractFolder; 44 import org.columba.addressbook.gui.autocomplete.AddressCollector; 45 import org.columba.addressbook.gui.autocomplete.DefaultAddressComboBox; 46 import org.columba.addressbook.gui.list.AddressbookDNDListView; 47 import org.columba.addressbook.gui.list.AddressbookListModel; 48 import org.columba.addressbook.model.IContactModelPartial; 49 import org.columba.addressbook.model.IGroupModel; 50 import org.columba.addressbook.util.AddressbookResourceLoader; 51 import org.columba.core.gui.base.ButtonWithMnemonic; 52 import org.columba.core.gui.base.SingleSideEtchedBorder; 53 54 import com.jgoodies.forms.builder.DefaultFormBuilder; 55 import com.jgoodies.forms.builder.PanelBuilder; 56 import com.jgoodies.forms.layout.CellConstraints; 57 import com.jgoodies.forms.layout.FormLayout; 58 59 60 public class EditGroupDialog extends JDialog implements ActionListener , 61 KeyListener { 62 private AddressbookDNDListView list; 63 64 private JButton addButton; 65 66 private JButton removeButton; 67 68 private JLabel nameLabel; 69 70 private JLabel descriptionLabel; 71 72 private JTextField nameTextField; 73 74 private JTextField descriptionTextField; 75 76 private DefaultAddressComboBox addComboBox; 77 78 private AddressbookListModel members; 79 80 private boolean result; 81 82 private ButtonWithMnemonic okButton; 83 84 private ButtonWithMnemonic cancelButton; 85 86 private IGroupModel group; 87 88 private AbstractFolder parentFolder; 89 90 99 public EditGroupDialog(JFrame frame, IGroupModel group, 100 AbstractFolder parentFolder) { 101 super(frame, true); 102 103 this.group = group; 104 this.parentFolder = parentFolder; 105 106 result = false; 107 108 setTitle(AddressbookResourceLoader.getString("dialog", 109 "editgroupdialog", "contact_list_editor")); 111 initComponents(); 113 114 layoutComponents(); 115 116 updateComponents(true); 117 118 pack(); 119 120 setLocationRelativeTo(null); 121 122 setVisible(true); 123 } 124 125 private JPanel createGroupNamePanel() { 126 JPanel panel = new JPanel (); 127 FormLayout layout = new FormLayout( 128 "12px, right:default, 6px, default:grow", ""); 130 DefaultFormBuilder b = new DefaultFormBuilder(layout, panel); 131 b.setRowGroupingEnabled(true); 132 b.setLeadingColumnOffset(1); 133 134 b.appendSeparator(AddressbookResourceLoader.getString("dialog", 135 "editgroupdialog", "description_3")); 137 b.append(nameLabel); 138 b.append(nameTextField); 139 140 b.append(descriptionLabel); 141 b.append(descriptionTextField); 142 143 return panel; 144 } 145 146 private JPanel createGroupPanel() { 147 JPanel panel = new JPanel (); 148 FormLayout layout = new FormLayout( 149 "6dlu, fill:default:grow, 6px, default", "default, 12px, default, 6px, default, fill:default:grow"); 152 PanelBuilder builder = new PanelBuilder(layout, panel); 153 CellConstraints cc = new CellConstraints(); 154 155 builder.addSeparator(AddressbookResourceLoader.getString("dialog", 156 "editgroupdialog", "group_members"), cc.xywh(1, 1, 4, 1)); 158 builder.add(addComboBox, cc.xy(2, 3)); 159 builder.add(addButton, cc.xy(4, 3)); 160 builder.add(new JScrollPane (list), cc.xywh(2, 5, 1, 2)); 161 builder.add(removeButton, cc.xy(4, 5)); 162 163 return panel; 164 } 165 166 private void layoutComponents() { 167 getContentPane().setLayout(new BorderLayout ()); 168 169 JPanel mainPanel = new JPanel (new BorderLayout ()); 170 mainPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12)); 171 172 FormLayout layout = new FormLayout("fill:default:grow", "default, 12px, fill:default:grow"); 175 CellConstraints cc = new CellConstraints(); 176 mainPanel.setLayout(layout); 177 178 mainPanel.add(createGroupNamePanel(), cc.xy(1, 1)); 179 mainPanel.add(createGroupPanel(), cc.xy(1, 3)); 180 181 getContentPane().add(mainPanel, BorderLayout.CENTER); 182 183 JPanel bottomPanel = new JPanel (new BorderLayout ()); 184 bottomPanel.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP)); 185 186 JPanel buttonPanel = new JPanel (new GridLayout (1, 2, 6, 0)); 187 buttonPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12)); 188 189 buttonPanel.add(okButton); 190 buttonPanel.add(cancelButton); 191 bottomPanel.add(buttonPanel, BorderLayout.EAST); 192 193 getContentPane().add(bottomPanel, BorderLayout.SOUTH); 194 } 195 196 private void initComponents() { 197 nameLabel = new JLabel (AddressbookResourceLoader.getString("dialog", 198 "editgroupdialog", "name")); nameTextField = new JTextField (); 200 201 descriptionLabel = new JLabel (AddressbookResourceLoader.getString( 202 "dialog", "editgroupdialog", "description_2")); descriptionTextField = new JTextField (); 204 205 addComboBox = new DefaultAddressComboBox(parentFolder.getId(), false); 206 ((JTextComponent ) addComboBox.getEditor().getEditorComponent()) 207 .addKeyListener(this); 208 209 members = new AddressbookListModel(); 210 list = new AddressbookDNDListView(members); 211 list.setMinimumSize(new Dimension (200, 300)); 212 213 addButton = new JButton ("Add"); addButton.addActionListener(this); 215 addButton.setActionCommand("ADD"); 217 removeButton = new JButton ("Remove"); removeButton.addActionListener(this); 219 removeButton.setActionCommand("REMOVE"); 221 okButton = new ButtonWithMnemonic(AddressbookResourceLoader.getString( 222 "global", "ok")); okButton.setActionCommand("OK"); okButton.addActionListener(this); 225 226 cancelButton = new ButtonWithMnemonic(AddressbookResourceLoader 227 .getString("global", "cancel")); cancelButton.setActionCommand("CANCEL"); cancelButton.addActionListener(this); 230 231 getRootPane().setDefaultButton(okButton); 232 getRootPane().registerKeyboardAction(this, "CANCEL", KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), 234 JComponent.WHEN_IN_FOCUSED_WINDOW); 235 } 236 237 public boolean getResult() { 238 return result; 239 } 240 241 public void updateComponents(boolean b) { 242 if (b) { 243 nameTextField.setText(group.getName()); descriptionTextField.setText(group.getDescription()); 247 members = new AddressbookListModel(); 248 249 String [] m = group.getMembers(); 250 251 try { 252 Map <String , IContactModelPartial> l = parentFolder.getContactItemMap(); 253 254 for (int i = 0; i < m.length; i++) { 255 256 IContactModelPartial item = l.get(m[i]); 257 258 members.addElement(item); 259 } 260 } catch (Exception e) { 261 262 e.printStackTrace(); 263 } 264 265 this.list.setModel(members); 266 } else { 267 group.setName(nameTextField.getText()); group.setDescription(descriptionTextField.getText()); 271 group.removeAllMembers(); 273 274 for (int i = 0; i < members.getSize(); i++) { 276 IContactModelPartial item = (IContactModelPartial) members.get(i); 277 String uid = item.getId(); 278 group.addMember(uid); 279 } 280 } 281 } 282 283 287 private void addHeaderItem() { 288 String s = addComboBox.getText(); 289 Object o = AddressCollector.getInstance().getHeaderItem(s); 290 291 if (o != null) { 292 members.addElement((IContactModelPartial) o); 294 addComboBox.setText(""); } else { 296 JOptionPane 297 .showMessageDialog(this, AddressbookResourceLoader 298 .getString("dialog", 299 "editgroupdialog", "You_can_only_add")); } 301 302 304 315 } 316 317 public void actionPerformed(ActionEvent e) { 318 String command = e.getActionCommand(); 319 320 if (command.equals("CANCEL")) { result = false; 322 setVisible(false); 323 } else if (command.equals("OK")) { 325 if (nameTextField.getText().length() == 0) { 326 JOptionPane 327 .showMessageDialog( 328 this, 329 AddressbookResourceLoader 330 .getString( 331 "dialog", 332 "editgroupdialog", "you_must_enter_a_name_for_the_group")); 334 return; 335 } 336 337 result = true; 338 339 updateComponents(false); 340 341 setVisible(false); 342 } else if (command.equals("ADD")) { addHeaderItem(); 344 } else if (command.equals("REMOVE")) { 346 int[] array = list.getSelectedIndices(); 347 348 for (int j = 0; j < array.length; j++) { 349 members.remove(array[j]); 350 } 351 } 352 } 353 354 355 public void keyTyped(KeyEvent e) { 356 } 357 358 public void keyPressed(KeyEvent e) { 359 } 360 361 public void keyReleased(KeyEvent e) { 362 char ch = e.getKeyChar(); 363 364 if (ch == KeyEvent.VK_ENTER) { 365 addHeaderItem(); 366 } 367 } 368 } 369 | Popular Tags |