1 package org.columba.mail.gui.table.action; 19 20 import java.awt.event.ActionEvent ; 21 import java.awt.event.ActionListener ; 22 import java.util.Enumeration ; 23 import java.util.Observable ; 24 import java.util.Observer ; 25 import java.util.Vector ; 26 27 import javax.swing.ButtonGroup ; 28 import javax.swing.JRadioButtonMenuItem ; 29 30 import org.columba.api.gui.frame.IFrameMediator; 31 import org.columba.api.selection.ISelectionListener; 32 import org.columba.api.selection.SelectionChangedEvent; 33 import org.columba.core.gui.menu.IMenu; 34 import org.columba.core.xml.XmlElement; 35 import org.columba.mail.folder.IMailFolder; 36 import org.columba.mail.folder.IMailbox; 37 import org.columba.mail.gui.frame.MailFrameMediator; 38 import org.columba.mail.gui.frame.TableViewOwner; 39 import org.columba.mail.gui.table.SortingStateObservable; 40 import org.columba.mail.gui.tree.selection.TreeSelectionChangedEvent; 41 import org.columba.mail.util.MailResourceLoader; 42 43 public class SortMessagesMenu extends IMenu implements ActionListener , 44 Observer , ISelectionListener { 45 private ButtonGroup columnGroup; 46 47 private ButtonGroup orderGroup; 48 49 private JRadioButtonMenuItem ascendingMenuItem; 50 51 private JRadioButtonMenuItem descendingMenuItem; 52 53 private Observable observable; 54 55 private IMailbox selectedFolder; 56 57 public SortMessagesMenu(IFrameMediator controller) { 58 super(controller, MailResourceLoader.getString("menu", "mainframe", 59 "menu_view_sort"), "menu_view_sort"); 60 61 62 63 ((MailFrameMediator) controller).registerTreeSelectionListener(this); 64 65 TableViewOwner table = (TableViewOwner) getFrameMediator(); 67 observable = table.getTableController().getSortingStateObservable(); 68 observable.addObserver(this); 69 70 } 72 73 protected void createSubMenu() { 74 removeAll(); 75 76 XmlElement columns = ((MailFrameMediator) getFrameMediator()) 77 .getFolderOptionsController().getConfigNode(selectedFolder, 78 "ColumnOptions"); 79 80 Vector v = new Vector (); 81 82 if (columns != null) { 85 for (int i = 0; i < columns.count(); i++) { 86 XmlElement column = columns.getElement(i); 87 88 String name = column.getAttribute("name"); 89 v.add(name); 90 } 91 } 92 93 Object [] items = new String [v.size()]; 94 items = v.toArray(); 95 96 columnGroup = new ButtonGroup (); 97 98 JRadioButtonMenuItem headerMenuItem; 99 100 for (int i = 0; i < items.length; i++) { 101 String item = (String ) items[i]; 102 103 String i18n = MailResourceLoader.getString("header", item 105 .toLowerCase()); 106 107 headerMenuItem = new JRadioButtonMenuItem (i18n); 108 headerMenuItem.setActionCommand(item); 109 headerMenuItem.addActionListener(this); 110 columnGroup.add(headerMenuItem); 111 add(headerMenuItem); 112 } 113 114 addSeparator(); 115 116 orderGroup = new ButtonGroup (); 117 ascendingMenuItem = new JRadioButtonMenuItem (MailResourceLoader 118 .getString("menu", "mainframe", "menu_view_sort_asc")); 119 ascendingMenuItem.setActionCommand("Ascending"); 120 ascendingMenuItem.addActionListener(this); 121 orderGroup.add(ascendingMenuItem); 122 add(ascendingMenuItem); 123 descendingMenuItem = new JRadioButtonMenuItem (MailResourceLoader 124 .getString("menu", "mainframe", "menu_view_sort_desc")); 125 descendingMenuItem.setActionCommand("Descending"); 126 descendingMenuItem.addActionListener(this); 127 orderGroup.add(descendingMenuItem); 128 add(descendingMenuItem); 129 130 } 132 133 138 public void actionPerformed(ActionEvent e) { 139 String action = e.getActionCommand(); 140 141 TableViewOwner table = (TableViewOwner) getFrameMediator(); 142 143 if (action.equals("Ascending")) { 144 table.getTableController().setSortingOrder(true); 145 146 } else if (action.equals("Descending")) { 147 table.getTableController().setSortingOrder(false); 148 149 } else { 150 table.getTableController().setSortingColumn(action); 151 152 } 153 154 table.getTableController().getSortingStateObservable() 155 .notifyObservers(); 156 157 } 159 160 165 public void update(Observable observable, Object object) { 166 String column = ((SortingStateObservable) observable).getColumn(); 167 boolean ascending = ((SortingStateObservable) observable).isOrder(); 168 169 updateState(column, ascending); 170 } 171 172 private void updateState(String column, boolean ascending) { 173 if (columnGroup == null) { 174 return; 175 } 176 177 Enumeration enumeration = columnGroup.getElements(); 178 179 while (enumeration.hasMoreElements()) { 180 JRadioButtonMenuItem item = (JRadioButtonMenuItem ) enumeration 181 .nextElement(); 182 183 if (item.getActionCommand().equals(column)) { 184 item.setSelected(true); 185 186 break; 187 } 188 } 189 190 if (ascending) { 191 ascendingMenuItem.setSelected(true); 192 } else { 193 descendingMenuItem.setSelected(true); 194 } 195 } 196 197 200 public void selectionChanged(SelectionChangedEvent e) { 201 IMailFolder[] selection = ((TreeSelectionChangedEvent) e).getSelected(); 202 203 if (selection.length == 1) { 204 if (!(selection[0] instanceof IMailbox)) { 205 return; 206 } 207 208 selectedFolder = (IMailbox) selection[0]; 209 210 createSubMenu(); 211 212 XmlElement xmlElement = ((MailFrameMediator) getFrameMediator()) 213 .getFolderOptionsController().getConfigNode(selectedFolder, 214 "SortingOptions"); 215 216 if (xmlElement != null) { 217 221 } 225 } 226 } 227 } | Popular Tags |