/*
 * $Id: PageNavigationAction.java 3117 2008-01-31 05:53:22Z xlv $
 *
 * Copyright 2007 Bruno Lowagie.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 * 
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */

package com.lowagie.rups.view;

import java.awt.event.ActionEvent;

import javax.swing.Icon;

import com.lowagie.rups.view.icons.IconActionListener;
import com.lowagie.rups.view.icons.IconFetcher;

/**
 * Class that can be used for some basic navigation actions.
 * Each action also has a corresponding icon.
 */
public class PageNavigationAction implements IconActionListener {
	/** Type to go to the first page. */
	public static final int FIRST_PAGE = 1;
	/** Type to go to the previous page. */
	public static final int PREVIOUS_PAGE = 2;
	/** Type to go to the next page. */
	public static final int NEXT_PAGE = 3;
	/** Type to go to the last page. */
	public static final int LAST_PAGE = 4;
	
	/** The type of this action. */
	protected int type;
	/** The object that is listening to the page navigation. */
	protected PageNavigationListener listener;
	/** The icon corresponding with the action. */
	protected Icon icon = null;
	
	/**
	 * Creates a page navigation action.
	 * @param listener	the object listening to the page navigation
	 * @param type		the type of action
	 * @param withIcon	if false, no icon will be attached to the action
	 */
	public PageNavigationAction(PageNavigationListener listener, int type, boolean withIcon) {
		super();
		this.listener = listener;
		this.type = type;
		if (withIcon) {
			switch(type) {
			case FIRST_PAGE:
				icon = IconFetcher.getIcon("navigation_first.png");
				break;
			case PREVIOUS_PAGE:
				icon = IconFetcher.getIcon("navigation_previous.png");
				break;
			case NEXT_PAGE:
				icon = IconFetcher.getIcon("navigation_next.png");
				break;
			case LAST_PAGE:
				icon = IconFetcher.getIcon("navigation_last.png");
				break;
			}
		}
	}

	/**
	 * @see com.lowagie.rups.view.icons.IconActionListener#getIcon()
	 */
	public Icon getIcon() {
		return icon;
	}

	/**
	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
	 */
	public void actionPerformed(ActionEvent evt) {
		switch(type) {
		case FIRST_PAGE:
			listener.gotoFirstPage();
			return;
		case PREVIOUS_PAGE:
			listener.gotoPreviousPage();
			return;
		case NEXT_PAGE:
			listener.gotoNextPage();
			return;
		case LAST_PAGE:
			listener.gotoLastPage();
			return;
		}	
	}
}
