KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > gui > tree > action > SortFoldersMenu


1 //The contents of this file are subject to the Mozilla Public License Version 1.1
2
//(the "License"); you may not use this file except in compliance with the
3
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
4
//
5
//Software distributed under the License is distributed on an "AS IS" basis,
6
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
7
//for the specific language governing rights and
8
//limitations under the License.
9
//
10
//The Original Code is "The Columba Project"
11
//
12
//The Initial Developers of the Original Code are Frederik Dietz and Timo Stich.
13
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
14
//
15
//All Rights Reserved.
16
package org.columba.mail.gui.tree.action;
17
18 import java.awt.event.ActionEvent JavaDoc;
19 import java.awt.event.ActionListener JavaDoc;
20
21 import javax.swing.ButtonGroup JavaDoc;
22 import javax.swing.JPopupMenu JavaDoc;
23 import javax.swing.JRadioButtonMenuItem JavaDoc;
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 /**
36  * Menu items for sorting the folder tree.
37  *
38  * @author redsolo
39  */

40 public class SortFoldersMenu extends JPopupMenu JavaDoc implements ActionListener JavaDoc {
41
42     private static final String JavaDoc UNSORTED_ACTION = "UNSORTED";
43
44     private static final String JavaDoc ALPHABETIC_ACTION = "ALPHABETIC";
45
46     private static final String JavaDoc UNREAD_ACTION = "UNREAD";
47
48     private static final String JavaDoc DESC_ACTION = "DESC";
49
50     private static final String JavaDoc ASC_ACTION = "ASC";
51
52     private ButtonGroup JavaDoc sortGroup;
53
54     private ButtonGroup JavaDoc orderGroup;
55
56     private JRadioButtonMenuItem JavaDoc unsortedMenuItem;
57
58     private JRadioButtonMenuItem JavaDoc unreadMenuItem;
59
60     private JRadioButtonMenuItem JavaDoc alphaMenuItem;
61
62     private JRadioButtonMenuItem JavaDoc ascendingMenuItem;
63
64     private JRadioButtonMenuItem JavaDoc descendingMenuItem;
65
66     private String JavaDoc activeComparator;
67
68     private IFrameMediator frameMediator;
69
70     /**
71      * Creates the sort folders submenu.
72      *
73      * @param controller
74      * the controller.
75      */

76     public SortFoldersMenu(IFrameMediator controller) {
77         this.frameMediator = controller;
78         // super(controller, MailResourceLoader.getString("menu", "mainframe",
79
// "menu_view_sort_tree"),"menu_view_sort_tree");
80

81         createSubMenu();
82         loadConfig();
83     }
84
85     /**
86      * Creates the sub menu.
87      */

88     private void createSubMenu() {
89         removeAll();
90
91         sortGroup = new ButtonGroup JavaDoc();
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 JavaDoc();
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     /**
110      * Loads the configuration.
111      */

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     /**
161      * Saves the config.
162      */

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     /**
184      * Adds a new JRadioButtonMenuItem to the menu and group.
185      *
186      * @param group
187      * the button group.
188      * @param i18nName
189      * the i18n name in the mainframe properties file.
190      * @param actionCommand
191      * the action command string for the action.
192      * @return the newly created menu item.
193      */

194     private JRadioButtonMenuItem JavaDoc addRadioButtonItem(ButtonGroup JavaDoc group,
195             String JavaDoc i18nName, String JavaDoc actionCommand) {
196         String JavaDoc 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     /**
207      * Menu actions.
208      *
209      * @param e
210      * the action event.
211      */

212     public void actionPerformed(ActionEvent JavaDoc e) {
213         String JavaDoc 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