1 package org.columba.mail.gui.config.subscribe; 19 20 import java.awt.BorderLayout ; 21 import java.awt.Color ; 22 import java.awt.Component ; 23 import java.awt.Dimension ; 24 import java.awt.GridBagConstraints ; 25 import java.awt.GridBagLayout ; 26 import java.awt.GridLayout ; 27 import java.awt.event.ActionEvent ; 28 import java.awt.event.ActionListener ; 29 import java.awt.event.KeyEvent ; 30 31 import javax.swing.BorderFactory ; 32 import javax.swing.Box ; 33 import javax.swing.BoxLayout ; 34 import javax.swing.JButton ; 35 import javax.swing.JComponent ; 36 import javax.swing.JDialog ; 37 import javax.swing.JFrame ; 38 import javax.swing.JPanel ; 39 import javax.swing.JScrollPane ; 40 import javax.swing.JTree ; 41 import javax.swing.KeyStroke ; 42 import javax.swing.SwingConstants ; 43 import javax.swing.event.TreeSelectionEvent ; 44 import javax.swing.event.TreeSelectionListener ; 45 import javax.swing.tree.DefaultTreeModel ; 46 47 import org.columba.core.command.Command; 48 import org.columba.core.command.CommandProcessor; 49 import org.columba.core.gui.base.ButtonWithMnemonic; 50 import org.columba.core.gui.base.SingleSideEtchedBorder; 51 import org.columba.core.help.HelpManager; 52 import org.columba.mail.command.MailFolderCommandReference; 53 import org.columba.mail.folder.imap.IMAPRootFolder; 54 import org.columba.mail.gui.config.filter.FilterTransferHandler; 55 import org.columba.mail.imap.FetchSubFolderListCommand; 56 import org.columba.mail.util.MailResourceLoader; 57 import org.frapuccino.checkabletree.CheckableTree; 58 59 64 public class SubscribeDialog extends JDialog implements ActionListener , 65 TreeSelectionListener { 66 private JButton subscribeButton; 67 68 private JButton syncButton; 69 70 private JButton unsubscribeButton; 71 72 private JTree tree; 73 74 private ListInfoTreeNode selection; 75 76 private IMAPRootFolder root; 77 78 private DefaultTreeModel treeModel; 79 80 public SubscribeDialog(JFrame parent, IMAPRootFolder rootFolder) { 81 super(parent, true); 82 83 setTitle(MailResourceLoader.getString("dialog", "subscribe", 84 "dialog_title")); 85 root = rootFolder; 86 87 initComponents(); 88 pack(); 89 setLocationRelativeTo(null); 90 91 syncFolderList(); 92 93 setVisible(true); 94 } 95 96 private void syncFolderList() { 97 setEnabled(false); 98 99 Command c = new SynchronizeFolderListCommand( 100 new SubscribeCommandReference(root, this)); 101 CommandProcessor.getInstance().addOp(c); 102 } 103 104 private void subscribe() { 105 setEnabled(false); 106 107 Command c = new SubscribeFolderCommand(new SubscribeCommandReference( 108 root, this, selection.getMailbox())); 109 CommandProcessor.getInstance().addOp(c); 110 } 111 112 private void unsubscribe() { 113 setEnabled(false); 114 115 Command c = new UnsubscribeFolderCommand(new SubscribeCommandReference( 116 root, this, selection.getMailbox())); 117 CommandProcessor.getInstance().addOp(c); 118 } 119 120 123 private void initComponents() { 124 JPanel mainPanel = new JPanel (); 125 mainPanel.setLayout(new BorderLayout ()); 126 mainPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12)); 127 getContentPane().add(mainPanel); 128 129 subscribeButton = new ButtonWithMnemonic(MailResourceLoader.getString( 130 "dialog", "subscribe", "subscribe")); 131 subscribeButton.setActionCommand("SUBSCRIBE"); 132 subscribeButton.addActionListener(this); 133 subscribeButton.setEnabled(false); 134 135 syncButton = new ButtonWithMnemonic(MailResourceLoader.getString( 136 "dialog", "subscribe", "sync")); 137 syncButton.setActionCommand("SYNC"); 138 syncButton.setEnabled(false); 139 syncButton.addActionListener(this); 140 141 unsubscribeButton = new ButtonWithMnemonic(MailResourceLoader 142 .getString("dialog", "subscribe", "unsubscribe")); 143 unsubscribeButton.setActionCommand("UNSUBSCRIBE"); 144 unsubscribeButton.setEnabled(false); 145 unsubscribeButton.addActionListener(this); 146 147 JPanel topPanel = new JPanel (); 149 topPanel.setLayout(new BoxLayout (topPanel, BoxLayout.X_AXIS)); 150 151 GridBagLayout gridBagLayout = new GridBagLayout (); 152 GridBagConstraints c = new GridBagConstraints (); 153 154 JPanel topBorderPanel = new JPanel (); 156 topBorderPanel.setLayout(new BorderLayout ()); 157 158 Component glue = Box.createVerticalGlue(); 159 c.anchor = GridBagConstraints.EAST; 160 c.gridwidth = GridBagConstraints.REMAINDER; 161 162 gridBagLayout.setConstraints(glue, c); 164 165 gridBagLayout = new GridBagLayout (); 166 c = new GridBagConstraints (); 167 168 JPanel eastPanel = new JPanel (gridBagLayout); 169 mainPanel.add(eastPanel, BorderLayout.EAST); 170 171 c.fill = GridBagConstraints.HORIZONTAL; 172 c.weightx = 1.0; 173 c.gridwidth = GridBagConstraints.REMAINDER; 174 gridBagLayout.setConstraints(subscribeButton, c); 175 eastPanel.add(subscribeButton); 176 177 Component strut1 = Box.createRigidArea(new Dimension (30, 6)); 178 gridBagLayout.setConstraints(strut1, c); 179 eastPanel.add(strut1); 180 181 gridBagLayout.setConstraints(unsubscribeButton, c); 182 eastPanel.add(unsubscribeButton); 183 184 Component strut = Box.createRigidArea(new Dimension (30, 12)); 185 gridBagLayout.setConstraints(strut, c); 186 eastPanel.add(strut); 187 188 gridBagLayout.setConstraints(syncButton, c); 189 eastPanel.add(syncButton); 190 191 glue = Box.createVerticalGlue(); 192 c.fill = GridBagConstraints.BOTH; 193 c.weighty = 1.0; 194 gridBagLayout.setConstraints(glue, c); 195 eastPanel.add(glue); 196 197 JPanel centerPanel = new JPanel (new BorderLayout ()); 199 centerPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 6)); 200 tree = new CheckableTree(); 201 tree.addTreeSelectionListener(this); 202 tree.setRootVisible(false); 203 204 JScrollPane scrollPane = new JScrollPane (tree); 205 scrollPane.setPreferredSize(new Dimension (300, 250)); 206 scrollPane.getViewport().setBackground(Color.white); 207 scrollPane.setTransferHandler(new FilterTransferHandler()); 208 centerPanel.add(scrollPane); 209 210 mainPanel.add(centerPanel); 211 212 JPanel bottomPanel = new JPanel (new BorderLayout ()); 213 bottomPanel.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP)); 214 215 JPanel buttonPanel = new JPanel (new GridLayout (1, 2, 6, 0)); 216 buttonPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12)); 217 218 ButtonWithMnemonic closeButton = new ButtonWithMnemonic( 219 MailResourceLoader.getString("global", "close")); 220 closeButton.setActionCommand("CLOSE"); closeButton.addActionListener(this); 222 buttonPanel.add(closeButton); 223 224 ButtonWithMnemonic helpButton = new ButtonWithMnemonic( 225 MailResourceLoader.getString("global", "help")); 226 buttonPanel.add(helpButton); 227 bottomPanel.add(buttonPanel, BorderLayout.EAST); 228 getContentPane().add(bottomPanel, BorderLayout.SOUTH); 229 getRootPane().setDefaultButton(closeButton); 230 getRootPane().registerKeyboardAction(this, "CLOSE", 231 KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), 232 JComponent.WHEN_IN_FOCUSED_WINDOW); 233 234 HelpManager.getInstance().enableHelpOnButton(helpButton, 236 "organising_and_managing_your_email_3"); 237 HelpManager.getInstance().enableHelpKey(getRootPane(), 238 "organising_and_managing_your_email_3"); 239 } 240 241 public void actionPerformed(ActionEvent e) { 242 String action = e.getActionCommand(); 243 244 if (action.equals("CLOSE")) { 245 syncAndExit(); 246 } else if (action.equals("SUBSCRIBE")) { 247 subscribe(); 248 } else if (action.equals("UNSUBSCRIBE")) { 249 unsubscribe(); 250 } else if (action.equals("SYNC")) { 251 syncFolderList(); 252 } 253 } 254 255 private void syncAndExit() { 256 setEnabled(false); 257 258 Command c = new FetchSubFolderListCommand( 259 new MailFolderCommandReference(root)); 260 CommandProcessor.getInstance().addOp(c); 261 262 setVisible(false); 263 } 264 265 266 269 public void valueChanged(TreeSelectionEvent arg0) { 270 selection = (ListInfoTreeNode) arg0.getPath().getLastPathComponent(); 271 272 updateButtons(); 273 } 274 275 278 private void updateButtons() { 279 if (selection != null) { 280 subscribeButton.setEnabled(!selection.isSelected()); 281 unsubscribeButton.setEnabled(selection.isSelected()); 282 } else { 283 subscribeButton.setEnabled(false); 284 unsubscribeButton.setEnabled(false); 285 } 286 287 syncButton.setEnabled(true); 288 tree.setEnabled(true); 289 } 290 291 294 public void syncFolderListDone(DefaultTreeModel model) { 295 tree.setModel(model); 296 tree.setRootVisible(true); 297 tree.expandRow(0); 298 299 treeModel = model; 300 301 updateButtons(); 302 } 303 304 public void setEnabled(boolean value) { 305 subscribeButton.setEnabled(value); 306 unsubscribeButton.setEnabled(value); 307 syncButton.setEnabled(value); 308 309 tree.setEnabled(value); 310 } 311 312 315 public void subscribeDone() { 316 selection.setSelected(true); 317 treeModel.nodeChanged(selection); 318 319 updateButtons(); 320 } 321 322 325 public void unsubscribeDone() { 326 selection.setSelected(false); 327 treeModel.nodeChanged(selection); 328 329 updateButtons(); 330 } 331 } | Popular Tags |