1 package org.columba.mail.gui.config.account; 19 20 import java.awt.Component ; 21 import java.awt.Font ; 22 import java.awt.GridBagConstraints ; 23 import java.awt.GridBagLayout ; 24 import java.awt.Insets ; 25 import java.awt.event.ActionEvent ; 26 import java.awt.event.ActionListener ; 27 28 import javax.swing.BorderFactory ; 29 import javax.swing.Box ; 30 import javax.swing.JButton ; 31 import javax.swing.JCheckBox ; 32 import javax.swing.JLabel ; 33 import javax.swing.JPanel ; 34 import javax.swing.border.Border ; 35 36 import org.columba.api.gui.frame.IFrameMediator; 37 import org.columba.core.gui.base.CheckBoxWithMnemonic; 38 import org.columba.core.gui.base.LabelWithMnemonic; 39 import org.columba.mail.config.AccountItem; 40 import org.columba.mail.config.MailConfig; 41 import org.columba.mail.config.SpecialFoldersItem; 42 import org.columba.mail.folder.IMailFolder; 43 import org.columba.mail.folder.IMailbox; 44 import org.columba.mail.gui.tree.FolderTreeModel; 45 import org.columba.mail.gui.tree.util.SelectFolderDialog; 46 import org.columba.mail.gui.tree.util.TreeNodeList; 47 import org.columba.mail.util.MailResourceLoader; 48 49 public class SpecialFoldersPanel extends DefaultPanel implements ActionListener { 50 private JLabel trashLabel; 51 52 private JButton trashButton; 53 54 private JLabel draftsLabel; 55 56 private JButton draftsButton; 57 58 private JLabel templatesLabel; 59 60 private JButton templatesButton; 61 62 private JLabel sentLabel; 63 64 private JButton sentButton; 65 66 private JLabel inboxLabel; 67 68 private JButton inboxButton; 69 70 private JCheckBox defaultAccountCheckBox; 71 72 private SpecialFoldersItem item; 73 74 private AccountItem accountItem; 75 76 private IFrameMediator mediator; 77 78 public SpecialFoldersPanel(IFrameMediator mediator, 79 AccountItem accountItem, SpecialFoldersItem item) { 80 super(); 81 82 this.mediator = mediator; 83 this.item = item; 84 this.accountItem = accountItem; 85 86 initComponents(); 87 88 updateComponents(true); 89 } 90 91 protected String getPath(String uid) { 92 93 IMailbox f = (IMailbox) FolderTreeModel.getInstance().getFolder(uid); 94 95 96 if (f == null) { 97 return ""; } 99 100 return f.getTreePath(); 101 } 102 103 protected String getUid(String treePath) { 104 TreeNodeList list = new TreeNodeList(treePath); 105 IMailbox f = (IMailbox) FolderTreeModel.getInstance().getFolder(list); 106 107 if (f == null) { 108 return ""; } 110 111 Integer i = new Integer (f.getId()); 112 113 return i.toString(); 114 } 115 116 protected boolean isPopAccount() { 117 return accountItem.isPopAccount(); 118 } 119 120 protected void updateComponents(boolean b) { 121 if (b) { 122 if (!isPopAccount()) { 123 trashButton 124 .setText(getPath(item.get(SpecialFoldersItem.TRASH))); 125 } 126 127 draftsButton.setText(getPath(item.get(SpecialFoldersItem.DRAFTS))); 128 templatesButton.setText(getPath(item 129 .get(SpecialFoldersItem.TEMPLATES))); 130 sentButton.setText(getPath(item.get(SpecialFoldersItem.SENT))); 131 132 if (isPopAccount()) { 133 inboxButton 134 .setText(getPath(item.get(SpecialFoldersItem.INBOX))); 135 } 136 137 defaultAccountCheckBox.setSelected(item 138 .getBoolean(SpecialFoldersItem.USE_DEFAULT_ACCOUNT)); 139 140 defaultAccountCheckBox.setEnabled(MailConfig.getInstance() 141 .getAccountList().getDefaultAccountUid() == accountItem 142 .getInteger(SpecialFoldersItem.UID)); 143 144 if (defaultAccountCheckBox.isEnabled() 145 && defaultAccountCheckBox.isSelected()) { 146 showDefaultAccountWarning(); 147 } else { 148 layoutComponents(); 149 } 150 } else { 151 if (!isPopAccount()) { 152 item.setString(SpecialFoldersItem.TRASH, getUid(trashButton 153 .getText())); 154 } 155 156 item.setString(SpecialFoldersItem.DRAFTS, getUid(draftsButton 157 .getText())); 158 item.setString(SpecialFoldersItem.TEMPLATES, getUid(templatesButton 159 .getText())); 160 item.setString(SpecialFoldersItem.SENT, 161 getUid(sentButton.getText())); 162 163 if (isPopAccount()) { 164 item.setString(SpecialFoldersItem.INBOX, getUid(inboxButton 165 .getText())); 166 } 167 168 item.setBoolean(SpecialFoldersItem.USE_DEFAULT_ACCOUNT, 169 defaultAccountCheckBox.isSelected()); 170 } 171 } 172 173 protected void layoutComponents() { 174 setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 175 176 GridBagLayout mainLayout = new GridBagLayout (); 177 GridBagConstraints mainConstraints = new GridBagConstraints (); 178 179 mainConstraints.anchor = GridBagConstraints.NORTHWEST; 180 mainConstraints.fill = GridBagConstraints.HORIZONTAL; 181 mainConstraints.weightx = 1.0; 182 183 setLayout(mainLayout); 184 185 mainConstraints.gridwidth = GridBagConstraints.REMAINDER; 186 mainConstraints.insets = new Insets (0, 10, 5, 0); 187 mainLayout.setConstraints(defaultAccountCheckBox, mainConstraints); 188 add(defaultAccountCheckBox); 189 190 JPanel folderPanel = new JPanel (); 191 Border b1 = BorderFactory.createEtchedBorder(); 192 Border b2 = BorderFactory.createTitledBorder(b1, MailResourceLoader 193 .getString("dialog", "account", "account_information")); 194 195 Border emptyBorder = BorderFactory.createEmptyBorder(5, 5, 5, 5); 196 Border border = BorderFactory.createCompoundBorder(b2, emptyBorder); 197 folderPanel.setBorder(border); 198 199 GridBagLayout layout = new GridBagLayout (); 200 GridBagConstraints c = new GridBagConstraints (); 201 folderPanel.setLayout(layout); 202 203 c.fill = GridBagConstraints.HORIZONTAL; 204 c.anchor = GridBagConstraints.WEST; 205 206 if (isPopAccount()) { 207 c.weightx = 0.1; 208 c.gridwidth = GridBagConstraints.RELATIVE; 209 layout.setConstraints(inboxLabel, c); 210 folderPanel.add(inboxLabel); 211 212 c.gridwidth = GridBagConstraints.REMAINDER; 213 c.weightx = 0.9; 214 layout.setConstraints(inboxButton, c); 215 folderPanel.add(inboxButton); 216 } 217 218 c.weightx = 0.1; 219 c.gridwidth = GridBagConstraints.RELATIVE; 220 layout.setConstraints(draftsLabel, c); 221 folderPanel.add(draftsLabel); 222 c.gridwidth = GridBagConstraints.REMAINDER; 223 c.weightx = 0.9; 224 layout.setConstraints(draftsButton, c); 225 folderPanel.add(draftsButton); 226 227 c.weightx = 0.1; 228 c.gridwidth = GridBagConstraints.RELATIVE; 229 layout.setConstraints(templatesLabel, c); 230 folderPanel.add(templatesLabel); 231 c.gridwidth = GridBagConstraints.REMAINDER; 232 c.weightx = 0.9; 233 layout.setConstraints(templatesButton, c); 234 folderPanel.add(templatesButton); 235 236 c.weightx = 0.1; 237 c.gridwidth = GridBagConstraints.RELATIVE; 238 layout.setConstraints(sentLabel, c); 239 folderPanel.add(sentLabel); 240 c.gridwidth = GridBagConstraints.REMAINDER; 241 c.weightx = 0.9; 242 layout.setConstraints(sentButton, c); 243 folderPanel.add(sentButton); 244 245 if (!isPopAccount()) { 246 c.weightx = 0.1; 247 c.gridwidth = GridBagConstraints.RELATIVE; 248 layout.setConstraints(trashLabel, c); 249 folderPanel.add(trashLabel); 250 c.gridwidth = GridBagConstraints.REMAINDER; 251 c.weightx = 0.9; 252 layout.setConstraints(trashButton, c); 253 folderPanel.add(trashButton); 254 } 255 256 mainConstraints.gridwidth = GridBagConstraints.REMAINDER; 257 mainConstraints.insets = new Insets (0, 0, 0, 0); 258 mainLayout.setConstraints(folderPanel, mainConstraints); 259 add(folderPanel); 260 261 mainConstraints.gridheight = GridBagConstraints.REMAINDER; 262 mainConstraints.weighty = 1.0; 263 mainConstraints.fill = GridBagConstraints.VERTICAL; 264 265 Component vglue = Box.createVerticalGlue(); 266 mainLayout.setConstraints(vglue, mainConstraints); 267 add(vglue); 268 } 269 270 protected void showDefaultAccountWarning() { 271 setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 272 273 GridBagLayout mainLayout = new GridBagLayout (); 274 GridBagConstraints mainConstraints = new GridBagConstraints (); 275 276 setLayout(mainLayout); 277 278 mainConstraints.gridwidth = GridBagConstraints.REMAINDER; 279 mainConstraints.anchor = GridBagConstraints.NORTHWEST; 280 mainConstraints.weightx = 1.0; 281 mainConstraints.insets = new Insets (0, 10, 5, 0); 282 mainLayout.setConstraints(defaultAccountCheckBox, mainConstraints); 283 add(defaultAccountCheckBox); 284 285 mainConstraints = new GridBagConstraints (); 286 mainConstraints.weighty = 1.0; 287 mainConstraints.gridwidth = GridBagConstraints.REMAINDER; 288 289 295 JLabel label = new JLabel (MailResourceLoader.getString("dialog", 296 "account", "using_default_account_settings")); 297 Font newFont = label.getFont().deriveFont(Font.BOLD); 298 label.setFont(newFont); 299 mainLayout.setConstraints(label, mainConstraints); 300 add(label); 301 } 302 303 protected void initComponents() { 304 defaultAccountCheckBox = new CheckBoxWithMnemonic(MailResourceLoader 305 .getString("dialog", "account", "use_default_account_settings")); 306 307 defaultAccountCheckBox.setActionCommand("DEFAULT_ACCOUNT"); 309 defaultAccountCheckBox.addActionListener(this); 310 311 if (isPopAccount()) { 312 inboxLabel = new LabelWithMnemonic(MailResourceLoader.getString( 313 "dialog", "account", "inbox_folder")); inboxButton = new JButton (); 315 inboxButton.setActionCommand("INBOX"); inboxButton.addActionListener(this); 317 inboxLabel.setLabelFor(inboxButton); 318 } 319 320 draftsLabel = new LabelWithMnemonic(MailResourceLoader.getString( 321 "dialog", "account", "drafts_folder")); draftsButton = new JButton (); 323 draftsButton.setActionCommand("DRAFTS"); draftsButton.addActionListener(this); 325 draftsLabel.setLabelFor(draftsButton); 326 327 templatesLabel = new LabelWithMnemonic(MailResourceLoader.getString( 328 "dialog", "account", "templates_folder")); templatesButton = new JButton (); 330 templatesButton.setActionCommand("TEMPLATES"); templatesButton.addActionListener(this); 332 templatesLabel.setLabelFor(templatesButton); 333 334 sentLabel = new LabelWithMnemonic(MailResourceLoader.getString( 335 "dialog", "account", "sent_folder")); sentButton = new JButton (); 337 sentButton.setActionCommand("SENT"); sentButton.addActionListener(this); 339 sentLabel.setLabelFor(sentButton); 340 341 if (!isPopAccount()) { 342 trashLabel = new LabelWithMnemonic(MailResourceLoader.getString( 343 "dialog", "account", "trash_folder")); trashButton = new JButton (); 345 trashButton.setActionCommand("TRASH"); trashButton.addActionListener(this); 347 trashLabel.setLabelFor(trashButton); 348 } 349 } 350 351 public void actionPerformed(ActionEvent e) { 352 String action = e.getActionCommand(); 353 354 if (action.equals("TRASH")) { 356 SelectFolderDialog dialog = new SelectFolderDialog(mediator); 357 358 if (dialog.success()) { 359 IMailFolder selectedFolder = (IMailFolder) dialog 360 .getSelectedFolder(); 361 String path = selectedFolder.getTreePath(); 362 363 trashButton.setText(path); 364 365 } 368 } else if (action.equals("INBOX")) { 370 SelectFolderDialog dialog = new SelectFolderDialog(mediator); 371 372 if (dialog.success()) { 373 IMailFolder selectedFolder = (IMailFolder) dialog 374 .getSelectedFolder(); 375 String path = selectedFolder.getTreePath(); 376 377 inboxButton.setText(path); 378 379 } 382 } else if (action.equals("DRAFTS")) { 384 SelectFolderDialog dialog = new SelectFolderDialog(mediator); 385 386 if (dialog.success()) { 387 IMailFolder selectedFolder = (IMailFolder) dialog 388 .getSelectedFolder(); 389 String path = selectedFolder.getTreePath(); 390 391 draftsButton.setText(path); 392 393 } 396 } else if (action.equals("TEMPLATES")) { 398 SelectFolderDialog dialog = new SelectFolderDialog(mediator); 399 400 if (dialog.success()) { 401 IMailFolder selectedFolder = (IMailFolder) dialog 402 .getSelectedFolder(); 403 String path = selectedFolder.getTreePath(); 404 405 templatesButton.setText(path); 406 407 } 410 } else if (action.equals("SENT")) { 412 SelectFolderDialog dialog = new SelectFolderDialog(mediator); 413 414 if (dialog.success()) { 415 IMailFolder selectedFolder = (IMailFolder) dialog 416 .getSelectedFolder(); 417 String path = selectedFolder.getTreePath(); 418 419 sentButton.setText(path); 420 421 } 424 } else if (action.equals("DEFAULT_ACCOUNT")) { 425 removeAll(); 426 427 if (defaultAccountCheckBox.isSelected()) { 428 showDefaultAccountWarning(); 429 } else { 430 layoutComponents(); 431 } 432 433 revalidate(); 434 } 435 } 436 437 public boolean isFinished() { 438 boolean result = true; 439 440 return result; 441 } 442 } | Popular Tags |