1 17 package org.columba.mail.gui.config.columns; 18 19 import java.awt.BorderLayout ; 20 import java.awt.Dimension ; 21 import java.awt.GridLayout ; 22 import java.awt.event.ActionEvent ; 23 import java.awt.event.ActionListener ; 24 import java.awt.event.KeyEvent ; 25 26 import javax.swing.BorderFactory ; 27 import javax.swing.DefaultListSelectionModel ; 28 import javax.swing.JButton ; 29 import javax.swing.JComponent ; 30 import javax.swing.JDialog ; 31 import javax.swing.JFrame ; 32 import javax.swing.JLabel ; 33 import javax.swing.JPanel ; 34 import javax.swing.JScrollPane ; 35 import javax.swing.KeyStroke ; 36 import javax.swing.SwingConstants ; 37 import javax.swing.event.ListSelectionEvent ; 38 import javax.swing.event.ListSelectionListener ; 39 40 import org.columba.core.gui.base.ButtonWithMnemonic; 41 import org.columba.core.gui.base.SingleSideEtchedBorder; 42 import org.columba.core.gui.util.DialogHeaderPanel; 43 import org.columba.core.help.HelpManager; 44 import org.columba.core.xml.XmlElement; 45 import org.columba.mail.command.IMailFolderCommandReference; 46 import org.columba.mail.folder.IMailbox; 47 import org.columba.mail.folderoptions.ColumnOptionsPlugin; 48 import org.columba.mail.folderoptions.FolderOptionsController; 49 import org.columba.mail.gui.frame.MailFrameMediator; 50 import org.columba.mail.util.MailResourceLoader; 51 import org.frapuccino.checkablelist.CheckableItemImpl; 52 import org.frapuccino.checkablelist.CheckableItemListTableModel; 53 import org.frapuccino.checkablelist.CheckableList; 54 55 import com.jgoodies.forms.layout.CellConstraints; 56 import com.jgoodies.forms.layout.FormLayout; 57 58 65 66 public class ColumnConfigDialog extends JDialog implements ActionListener , 67 ListSelectionListener { 68 69 private JButton showButton; 70 71 private JButton hideButton; 72 73 private CheckableList list; 74 75 private int index; 76 77 private XmlElement columns; 78 79 private CheckableItemImpl selection; 80 81 private MailFrameMediator mediator; 82 83 public ColumnConfigDialog(MailFrameMediator mediator, XmlElement columns) { 84 super((JFrame ) mediator.getView().getFrame(), MailResourceLoader 85 .getString("dialog", "columns", "title"), true); 86 this.mediator = mediator; 87 this.columns = columns; 88 89 list = new CheckableList(); 90 list.getSelectionModel().addListSelectionListener(this); 91 92 initComponents(); 93 updateComponents(true); 94 95 getRootPane().registerKeyboardAction(this, "CLOSE", 96 KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), 97 JComponent.WHEN_IN_FOCUSED_WINDOW); 98 pack(); 99 setLocationRelativeTo(null); 100 setVisible(true); 101 } 102 103 protected JPanel createButtonPanel() { 104 JPanel bottom = new JPanel (); 105 bottom.setLayout(new BorderLayout ()); 106 107 bottom.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12)); 108 109 ButtonWithMnemonic cancelButton = new ButtonWithMnemonic( 110 MailResourceLoader.getString("global", "cancel")); 111 112 cancelButton.addActionListener(this); 114 cancelButton.setActionCommand("CANCEL"); 116 ButtonWithMnemonic okButton = new ButtonWithMnemonic(MailResourceLoader 117 .getString("global", "ok")); 118 119 okButton.addActionListener(this); 121 okButton.setActionCommand("OK"); okButton.setDefaultCapable(true); 123 getRootPane().setDefaultButton(okButton); 124 125 ButtonWithMnemonic helpButton = new ButtonWithMnemonic( 126 MailResourceLoader.getString("global", "help")); 127 128 HelpManager.getInstance().enableHelpOnButton(helpButton, 130 "configuring_columba"); 131 HelpManager.getInstance().enableHelpKey(getRootPane(), 132 "configuring_columba"); 133 134 JPanel buttonPanel = new JPanel (); 135 buttonPanel.setLayout(new GridLayout (1, 3, 6, 0)); 136 buttonPanel.add(okButton); 137 buttonPanel.add(cancelButton); 138 buttonPanel.add(helpButton); 139 140 bottom.add(buttonPanel, BorderLayout.EAST); 141 return bottom; 142 } 143 144 public void initComponents() { 145 146 showButton = new ButtonWithMnemonic(MailResourceLoader.getString( 147 "dialog", "columns", "show")); 148 showButton.setActionCommand("SHOW"); 149 showButton.addActionListener(this); 150 showButton.setEnabled(false); 151 152 hideButton = new ButtonWithMnemonic(MailResourceLoader.getString( 153 "dialog", "columns", "hide")); 154 hideButton.setActionCommand("HIDE"); 155 hideButton.setEnabled(false); 156 hideButton.addActionListener(this); 157 158 getContentPane().add(createPanel(), BorderLayout.CENTER); 159 160 getContentPane().add(createBottomPanel(), BorderLayout.SOUTH); 161 162 getContentPane().add( 163 new DialogHeaderPanel(MailResourceLoader.getString("dialog", 164 "columns", "header_title"), MailResourceLoader 165 .getString("dialog", "columns", "header_description")), 166 BorderLayout.NORTH); 167 } 168 169 private JPanel createPanel() { 170 JPanel jpanel1 = new JPanel (); 171 FormLayout formlayout1 = new FormLayout( 172 "FILL:DEFAULT:GROW(1.0),3DLU,FILL:DEFAULT:NONE", 173 "CENTER:DEFAULT:NONE,1DLU,FILL:DEFAULT:GROW(1.0),3DLU,CENTER:DEFAULT:NONE"); 174 CellConstraints cc = new CellConstraints(); 175 jpanel1.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12)); 176 jpanel1.setLayout(formlayout1); 177 178 JLabel jlabel1 = new JLabel (); 179 jlabel1.setText("Columns:"); 180 jpanel1.add(jlabel1, cc.xy(1, 1)); 181 182 JScrollPane scrollPane = new JScrollPane (list); 183 scrollPane.setPreferredSize(new Dimension (250, 200)); 184 jpanel1.add(scrollPane, cc.xy(1, 3)); 185 186 jpanel1.add(createPanel1(), new CellConstraints(3, 3, 1, 1, 187 CellConstraints.DEFAULT, CellConstraints.TOP)); 188 189 return jpanel1; 190 } 191 192 private JPanel createPanel1() { 193 JPanel jpanel1 = new JPanel (); 194 FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE", 195 "CENTER:DEFAULT:NONE,3DLU,CENTER:DEFAULT:NONE,3DLU,CENTER:DEFAULT:NONE"); 196 CellConstraints cc = new CellConstraints(); 197 jpanel1.setLayout(formlayout1); 198 199 jpanel1.add(showButton, cc.xy(1, 1)); 200 201 jpanel1.add(hideButton, cc.xy(1, 3)); 202 203 return jpanel1; 204 } 205 206 209 private JPanel createBottomPanel() { 210 JPanel bottomPanel = new JPanel (new BorderLayout ()); 211 bottomPanel.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP)); 212 213 JPanel buttonPanel = createButtonPanel(); 214 215 bottomPanel.add(buttonPanel, BorderLayout.EAST); 216 217 return bottomPanel; 218 } 219 220 private XmlElement findColumn(XmlElement parent, String name) { 221 for (int i = 0; i < parent.count(); i++) { 222 XmlElement child = parent.getElement(i); 223 if (child.getAttribute("name").equals(name)) { 224 return child; 225 } 226 } 227 return null; 228 } 229 230 public void updateComponents(boolean b) { 231 if (b) { 232 CheckableItemListTableModel model = new CheckableItemListTableModel(); 233 String [] stringList = ColumnOptionsPlugin.getColumns(); 234 235 for (int j = 0; j < stringList.length; j++) { 236 String c = stringList[j]; 237 CheckableItemImpl item = new CheckableItemImpl(c); 238 XmlElement element = findColumn(columns, c); 239 item.setSelected(element != null); 240 model.addElement(item); 241 } 242 243 list.setModel(model); 244 } else { 245 CheckableItemListTableModel model = ((CheckableItemListTableModel) list 246 .getModel()); 247 248 for (int i = 0; i < model.count(); i++) { 249 CheckableItemImpl column = (CheckableItemImpl) model 251 .getElement(i); 252 253 XmlElement element = findColumn(columns, column.toString()); 255 256 if (element != null) { 257 if (!column.isSelected()) { 259 element.removeFromParent(); 260 } 261 } else { 262 if (column.isSelected()) { 263 XmlElement newElement = new XmlElement("column"); 264 newElement.addAttribute("name", column.toString()); 265 newElement.addAttribute("width", "100"); 266 columns.addElement(newElement); 267 } 268 } 269 } 270 } 271 } 272 273 public void valueChanged(ListSelectionEvent e) { 274 if (e.getValueIsAdjusting()) { 275 return; 276 } 277 278 DefaultListSelectionModel theList = (DefaultListSelectionModel ) e 279 .getSource(); 280 if (!theList.isSelectionEmpty()) { 281 index = theList.getAnchorSelectionIndex(); 282 283 selection = (CheckableItemImpl) ((CheckableItemListTableModel) list 284 .getModel()).getElement(index); 285 286 updateButtonState(); 287 } 288 } 289 290 private void updateButtonState() { 291 if (selection.isSelected()) { 292 hideButton.setEnabled(true); 293 showButton.setEnabled(false); 294 } else { 295 showButton.setEnabled(true); 296 hideButton.setEnabled(false); 297 } 298 } 299 300 public void actionPerformed(ActionEvent e) { 301 String action = e.getActionCommand(); 302 303 if (action.equals("OK")) { 304 updateComponents(false); 305 306 setVisible(false); 307 308 ColumnOptionsPlugin plugin = (ColumnOptionsPlugin) ((FolderOptionsController) mediator 309 .getFolderOptionsController()).getPlugin("ColumnOptions"); 310 311 IMailFolderCommandReference r = mediator.getTreeSelection(); 313 plugin.loadOptionsFromXml((IMailbox) r.getSourceFolder()); 314 } else if (action.equals("CANCEL")) { 315 setVisible(false); 316 } else if (action.equals("SHOW")) { 317 if (selection != null) { 318 selection.setSelected(!selection.isSelected()); 319 ((CheckableItemListTableModel) list.getModel()) 320 .updateRow(selection); 321 322 updateButtonState(); 324 } 325 } else if (action.equals("HIDE")) { 326 if (selection != null) { 328 selection.setSelected(!selection.isSelected()); 329 ((CheckableItemListTableModel) list.getModel()) 330 .updateRow(selection); 331 332 updateButtonState(); 334 } 335 } 336 } 337 } | Popular Tags |