1 package org.columba.mail.gui.tree.action; 17 18 import java.awt.event.ActionEvent ; 19 import java.awt.event.ActionListener ; 20 21 import javax.swing.ButtonGroup ; 22 import javax.swing.JPopupMenu ; 23 import javax.swing.JRadioButtonMenuItem ; 24 25 import org.columa.core.config.IDefaultItem; 26 import org.columba.api.gui.frame.IFrameMediator; 27 import org.columba.core.config.DefaultItem; 28 import org.columba.core.gui.action.CRadioButtonMenuItem; 29 import org.columba.core.xml.XmlElement; 30 import org.columba.mail.config.MailConfig; 31 import org.columba.mail.gui.frame.TreeViewOwner; 32 import org.columba.mail.gui.tree.ITreeController.SORTING_MODE_ENUM; 33 import org.columba.mail.util.MailResourceLoader; 34 35 40 public class SortFoldersMenu extends JPopupMenu implements ActionListener { 41 42 private static final String UNSORTED_ACTION = "UNSORTED"; 43 44 private static final String ALPHABETIC_ACTION = "ALPHABETIC"; 45 46 private static final String UNREAD_ACTION = "UNREAD"; 47 48 private static final String DESC_ACTION = "DESC"; 49 50 private static final String ASC_ACTION = "ASC"; 51 52 private ButtonGroup sortGroup; 53 54 private ButtonGroup orderGroup; 55 56 private JRadioButtonMenuItem unsortedMenuItem; 57 58 private JRadioButtonMenuItem unreadMenuItem; 59 60 private JRadioButtonMenuItem alphaMenuItem; 61 62 private JRadioButtonMenuItem ascendingMenuItem; 63 64 private JRadioButtonMenuItem descendingMenuItem; 65 66 private String activeComparator; 67 68 private IFrameMediator frameMediator; 69 70 76 public SortFoldersMenu(IFrameMediator controller) { 77 this.frameMediator = controller; 78 81 createSubMenu(); 82 loadConfig(); 83 } 84 85 88 private void createSubMenu() { 89 removeAll(); 90 91 sortGroup = new ButtonGroup (); 92 93 unsortedMenuItem = addRadioButtonItem(sortGroup, 94 "menu_view_sort_tree_unsorted", UNSORTED_ACTION); 95 alphaMenuItem = addRadioButtonItem(sortGroup, 96 "menu_view_sort_tree_alpha", ALPHABETIC_ACTION); 97 unreadMenuItem = addRadioButtonItem(sortGroup, 98 "menu_view_sort_tree_unread", UNREAD_ACTION); 99 100 addSeparator(); 101 102 orderGroup = new ButtonGroup (); 103 ascendingMenuItem = addRadioButtonItem(orderGroup, 104 "menu_view_sort_asc", ASC_ACTION); 105 descendingMenuItem = addRadioButtonItem(orderGroup, 106 "menu_view_sort_desc", DESC_ACTION); 107 } 108 109 112 private void loadConfig() { 113 114 TreeViewOwner mediator = (TreeViewOwner) frameMediator; 115 116 XmlElement element = MailConfig.getInstance().get("options") 117 .getElement("/options/gui/tree/sorting"); 118 119 boolean enableSorting = false; 120 if (element != null) { 121 IDefaultItem item = new DefaultItem(element); 122 boolean ascending = item.getBooleanWithDefault("ascending", true); 123 activeComparator = item.getRoot().getAttribute("comparator", "") 124 .toUpperCase(); 125 126 if (activeComparator.equals(ALPHABETIC_ACTION)) { 127 mediator.getTreeController().setSortingMode( 128 SORTING_MODE_ENUM.ALPHABETICAL, ascending); 129 enableSorting = true; 130 alphaMenuItem.setSelected(true); 131 } else if (activeComparator.equals(UNREAD_ACTION)) { 132 mediator.getTreeController().setSortingMode( 133 SORTING_MODE_ENUM.UNREAD_COUNT, ascending); 134 enableSorting = true; 135 unreadMenuItem.setSelected(true); 136 } else { 137 unsortedMenuItem.setSelected(true); 138 ascendingMenuItem.setEnabled(false); 139 descendingMenuItem.setEnabled(false); 140 } 141 142 if (ascending) { 143 ascendingMenuItem.setSelected(true); 144 } else { 145 descendingMenuItem.setSelected(true); 146 } 147 } else { 148 mediator.getTreeController().setSortingMode( 149 SORTING_MODE_ENUM.ALPHABETICAL, true); 150 enableSorting = true; 151 alphaMenuItem.setSelected(true); 152 ascendingMenuItem.setSelected(true); 153 } 154 155 if (enableSorting) 156 mediator.getTreeController().setSortingEnabled(true); 157 158 } 159 160 163 private void saveConfig() { 164 XmlElement treeElement = MailConfig.getInstance().get("options") 165 .getElement("/options/gui/tree"); 166 if (treeElement == null) { 167 treeElement = MailConfig.getInstance().get("options").getElement( 168 "/options/gui").addSubElement("tree"); 169 } 170 171 XmlElement element = treeElement.getElement("sorting"); 172 if (element == null) { 173 element = treeElement.addSubElement("sorting"); 174 } 175 176 IDefaultItem item = new DefaultItem(element); 177 item.setBoolean("ascending", ascendingMenuItem.isSelected()); 178 item.setString("comparator", activeComparator.toLowerCase()); 179 item.setBoolean("sorted", !activeComparator.equals(UNSORTED_ACTION)); 180 element.notifyObservers(); 181 } 182 183 194 private JRadioButtonMenuItem addRadioButtonItem(ButtonGroup group, 195 String i18nName, String actionCommand) { 196 String i18n = MailResourceLoader.getString("menu", "mainframe", 197 i18nName); 198 CRadioButtonMenuItem headerMenuItem = new CRadioButtonMenuItem(i18n); 199 headerMenuItem.setActionCommand(actionCommand); 200 headerMenuItem.addActionListener(this); 201 group.add(headerMenuItem); 202 add(headerMenuItem); 203 return headerMenuItem; 204 } 205 206 212 public void actionPerformed(ActionEvent e) { 213 String action = e.getActionCommand(); 214 215 TreeViewOwner mediator = (TreeViewOwner) frameMediator; 216 217 if (action.equals(UNSORTED_ACTION)) { 218 219 activeComparator = UNSORTED_ACTION; 220 ascendingMenuItem.setEnabled(false); 221 descendingMenuItem.setEnabled(false); 222 mediator.getTreeController().setSortingEnabled(false); 223 } else { 224 225 ascendingMenuItem.setEnabled(true); 226 descendingMenuItem.setEnabled(true); 227 mediator.getTreeController().setSortingEnabled(true); 228 if (action.equals(ASC_ACTION)) { 229 mediator.getTreeController().sortAscending(true); 230 } else if (action.equals(DESC_ACTION)) { 231 mediator.getTreeController().sortAscending(false); 232 } else { 233 activeComparator = action; 234 if (action.equals(UNREAD_ACTION)) { 235 mediator.getTreeController().setSortingMode( 236 SORTING_MODE_ENUM.UNREAD_COUNT, 237 ascendingMenuItem.isSelected()); 238 } else if (action.equals(ALPHABETIC_ACTION)) { 239 mediator.getTreeController().setSortingMode( 240 SORTING_MODE_ENUM.ALPHABETICAL, 241 ascendingMenuItem.isSelected()); 242 243 } 244 } 245 } 246 saveConfig(); 247 } 248 } 249 | Popular Tags |