|                                                                                                              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                                                                                                                                                                                              |