001: //The contents of this file are subject to the Mozilla Public License Version 1.1
002: //(the "License"); you may not use this file except in compliance with the
003: //License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
004: //
005: //Software distributed under the License is distributed on an "AS IS" basis,
006: //WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
007: //for the specific language governing rights and
008: //limitations under the License.
009: //
010: //The Original Code is "The Columba Project"
011: //
012: //The Initial Developers of the Original Code are Frederik Dietz and Timo Stich.
013: //Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
014: //
015: //All Rights Reserved.
016: package org.columba.mail.gui.table.action;
017:
018: import java.awt.event.ActionEvent;
019:
020: import org.columba.api.gui.frame.IFrameMediator;
021: import org.columba.api.selection.ISelectionListener;
022: import org.columba.api.selection.SelectionChangedEvent;
023: import org.columba.core.command.CommandProcessor;
024: import org.columba.core.gui.action.AbstractColumbaAction;
025: import org.columba.core.resourceloader.IconKeys;
026: import org.columba.core.resourceloader.ImageLoader;
027: import org.columba.mail.command.IMailFolderCommandReference;
028: import org.columba.mail.gui.frame.MailFrameMediator;
029: import org.columba.mail.gui.frame.TableViewOwner;
030: import org.columba.mail.gui.message.command.ViewMessageCommand;
031: import org.columba.mail.gui.table.IMessageNode;
032: import org.columba.mail.gui.table.ITableController;
033: import org.columba.mail.gui.table.model.MessageNode;
034: import org.columba.mail.gui.table.selection.TableSelectionChangedEvent;
035: import org.columba.mail.util.MailResourceLoader;
036:
037: /**
038: * Select previous message in message list.
039: *
040: * <p>
041: * Note that this action is also used in the message-frame (frame without
042: * folder tree and without message list), which depends on the parent frame
043: * for referencing messages.
044: *
045: * @see org.columba.mail.gui.messageframe.MessageFrameController
046: *
047: * @author fdietz
048: */
049: public class PreviousMessageAction extends AbstractColumbaAction
050: implements ISelectionListener {
051: public PreviousMessageAction(IFrameMediator frameMediator) {
052: super (frameMediator, MailResourceLoader.getString("menu",
053: "mainframe", "menu_view_prevmessage"));
054:
055: // tooltip text
056: putValue(SHORT_DESCRIPTION, MailResourceLoader.getString(
057: "menu", "mainframe", "menu_view_prevmessage_tooltip")
058: .replaceAll("&", ""));
059:
060: // icons
061: putValue(LARGE_ICON, ImageLoader.getIcon(IconKeys.GO_PREVIOUS));
062: putValue(SMALL_ICON, ImageLoader
063: .getSmallIcon(IconKeys.GO_PREVIOUS));
064:
065: // shortcut key
066: //putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("B"));
067:
068: // disable toolbar text
069: setShowToolBarText(false);
070:
071: //setEnabled(false);
072:
073: // uncomment to enable action
074:
075: /*
076: * ((MailFrameMediator)
077: * frameMediator).registerTableSelectionListener(this);
078: */
079: }
080:
081: /**
082: *
083: * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
084: */
085: public void actionPerformed(ActionEvent evt) {
086: IMailFolderCommandReference r = ((MailFrameMediator) getFrameMediator())
087: .getTableSelection();
088: ITableController table = ((TableViewOwner) getFrameMediator())
089: .getTableController();
090: if (table == null)
091: return;
092:
093: if (r == null)
094: return;
095:
096: IMessageNode[] nodes = table.getSelectedNodes();
097: if (nodes.length == 0)
098: return;
099:
100: MessageNode node = (MessageNode) nodes[0];
101: MessageNode previousNode = (MessageNode) node.getPreviousNode();
102: if (previousNode == null)
103: return;
104:
105: // necessary for the message-frame only
106: r.setUids(new Object[] { previousNode.getUid() });
107: ((MailFrameMediator) getFrameMediator()).setTableSelection(r);
108: CommandProcessor.getInstance().addOp(
109: new ViewMessageCommand(getFrameMediator(), r));
110:
111: // select message in message list
112: table.setSelected(new Object[] { previousNode.getUid() });
113: }
114:
115: /**
116: *
117: * @see org.columba.core.gui.util.ISelectionListener#connectionChanged(org.columba.core.gui.util.SelectionChangedEvent)
118: */
119: public void selectionChanged(SelectionChangedEvent e) {
120: setEnabled(((TableSelectionChangedEvent) e).getUids().length > 0);
121: }
122: }
|