KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > gui > table > action > SortMessagesMenu


1 // The contents of this file are subject to the Mozilla Public License Version
2
// 1.1
3
//(the "License"); you may not use this file except in compliance with the
4
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
5
//
6
//Software distributed under the License is distributed on an "AS IS" basis,
7
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
8
//for the specific language governing rights and
9
//limitations under the License.
10
//
11
//The Original Code is "The Columba Project"
12
//
13
//The Initial Developers of the Original Code are Frederik Dietz and Timo
14
// Stich.
15
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
16
//
17
//All Rights Reserved.
18
package org.columba.mail.gui.table.action;
19
20 import java.awt.event.ActionEvent JavaDoc;
21 import java.awt.event.ActionListener JavaDoc;
22 import java.util.Enumeration JavaDoc;
23 import java.util.Observable JavaDoc;
24 import java.util.Observer JavaDoc;
25 import java.util.Vector JavaDoc;
26
27 import javax.swing.ButtonGroup JavaDoc;
28 import javax.swing.JRadioButtonMenuItem JavaDoc;
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 JavaDoc,
44         Observer JavaDoc, ISelectionListener {
45     private ButtonGroup JavaDoc columnGroup;
46
47     private ButtonGroup JavaDoc orderGroup;
48
49     private JRadioButtonMenuItem JavaDoc ascendingMenuItem;
50
51     private JRadioButtonMenuItem JavaDoc descendingMenuItem;
52
53     private Observable JavaDoc 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         // register as Observer
66
TableViewOwner table = (TableViewOwner) getFrameMediator();
67         observable = table.getTableController().getSortingStateObservable();
68         observable.addObserver(this);
69
70         // createSubMenu();
71
}
72
73     protected void createSubMenu() {
74         removeAll();
75
76         XmlElement columns = ((MailFrameMediator) getFrameMediator())
77                 .getFolderOptionsController().getConfigNode(selectedFolder,
78                         "ColumnOptions");
79
80         Vector JavaDoc v = new Vector JavaDoc();
81
82         // *20040510, karlpeder* columns may be null (first time we visit a
83
// folder!?)
84
if (columns != null) {
85             for (int i = 0; i < columns.count(); i++) {
86                 XmlElement column = columns.getElement(i);
87
88                 String JavaDoc name = column.getAttribute("name");
89                 v.add(name);
90             }
91         }
92
93         Object JavaDoc[] items = new String JavaDoc[v.size()];
94         items = v.toArray();
95
96         columnGroup = new ButtonGroup JavaDoc();
97
98         JRadioButtonMenuItem JavaDoc headerMenuItem;
99
100         for (int i = 0; i < items.length; i++) {
101             String JavaDoc item = (String JavaDoc) items[i];
102
103             // all headerfields are lowercase in property file
104
String JavaDoc i18n = MailResourceLoader.getString("header", item
105                     .toLowerCase());
106
107             headerMenuItem = new JRadioButtonMenuItem JavaDoc(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 JavaDoc();
117         ascendingMenuItem = new JRadioButtonMenuItem JavaDoc(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 JavaDoc(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         // update(observable, null);
131
}
132
133     /*
134      * (non-Javadoc)
135      *
136      * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
137      */

138     public void actionPerformed(ActionEvent JavaDoc e) {
139         String JavaDoc 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         // update(observable, null);
158
}
159
160     /*
161      * (non-Javadoc)
162      *
163      * @see java.util.Observer#update(java.util.Observable, java.lang.Object)
164      */

165     public void update(Observable JavaDoc observable, Object JavaDoc object) {
166         String JavaDoc column = ((SortingStateObservable) observable).getColumn();
167         boolean ascending = ((SortingStateObservable) observable).isOrder();
168
169         updateState(column, ascending);
170     }
171
172     private void updateState(String JavaDoc column, boolean ascending) {
173         if (columnGroup == null) {
174             return;
175         }
176
177         Enumeration JavaDoc enumeration = columnGroup.getElements();
178
179         while (enumeration.hasMoreElements()) {
180             JRadioButtonMenuItem JavaDoc item = (JRadioButtonMenuItem JavaDoc) 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     /**
198      * @see org.columba.core.gui.util.ISelectionListener#connectionChanged(org.columba.core.gui.util.SelectionChangedEvent)
199      */

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                 // *20040510, karlpeder* columns may be null (first time we
218
// visit a folder!?)
219
// IDefaultItem item = new DefaultItem(xmlElement);
220

221                 // String column = xmlElement.getAttribute("column");
222
// String s = threadedview.getAttribute("order");
223
// boolean order = item.getBoolean("order");
224
}
225         }
226     }
227 }
Popular Tags