/*
* HistoryButton.java - History Button
* :tabSize=4:indentSize=4:noTabs=false:
* :folding=explicit:collapseFolds=1:
*
* Copyright (C) 2005 Nicholas O'Leary
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package org.gjt.sp.jedit.help;
//{{{ Imports
import org.gjt.sp.jedit.*;
import org.gjt.sp.jedit.gui.RolloverButton;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
//}}}
/**
* History Button
* @author Nicholas O'Leary
* @version $Id$
*/
public class HistoryButton extends JPanel implements ActionListener
{
public static final int BACK = 0;
public static final int FORWARD = 1;
//{{{ Private Members
private int type;
private HelpHistoryModel history;
private RolloverButton arrow_button;
private RolloverButton drop_button;
private JPopupMenu historyList;
private ActionListener arrowActionListener;
//}}}
//{{{ HistoryButton constructor
public HistoryButton(int type, HelpHistoryModel model)
{
super();
arrow_button = new RolloverButton(GUIUtilities.loadIcon(
jEdit.getProperty(type==BACK
? "helpviewer.back.icon"
: "helpviewer.forward.icon")));
arrow_button.setToolTipText(
jEdit.getProperty(type==BACK
? "helpviewer.back.label"
: "helpviewer.forward.label"));
Box box = new Box(BoxLayout.X_AXIS);
drop_button = new RolloverButton(GUIUtilities.loadIcon(jEdit.getProperty("dropdown-arrow.icon")));
drop_button.addActionListener(new DropActionHandler());
box.add(arrow_button);
box.add(drop_button);
this.setMaximumSize(new Dimension(
drop_button.getPreferredSize().width +
arrow_button.getPreferredSize().width +
5,
arrow_button.getPreferredSize().height + 10)
);
this.add(box);
this.type = type;
this.history = model;
} //}}}
//{{{ setEnabled() method
public void setEnabled(boolean state)
{
super.setEnabled(state);
drop_button.setEnabled(state);
arrow_button.setEnabled(state);
} //}}}
//{{{ addActionListener() method
public void addActionListener(ActionListener al)
{
arrow_button.addActionListener(this);
arrowActionListener = al;
} //}}}
//{{{ actionPerformed() method
public void actionPerformed(ActionEvent evt)
{
arrowActionListener.actionPerformed(
new ActionEvent(this,
ActionEvent.ACTION_PERFORMED,
evt.getActionCommand(),
evt.getWhen(),
evt.getModifiers()
)
);
} //}}}
//{{{ getParentHistoryButton() method
private HistoryButton getParentHistoryButton()
{
return this;
} //}}}
//{{{ Inner Classes
//{{{ DropActionHandler class
class DropActionHandler implements ActionListener
{
//{{{ actionPerformed() method
public void actionPerformed(ActionEvent evt)
{
historyList = new JPopupMenu();
HelpHistoryModel.HistoryEntry[] urls;
if (type == BACK)
{
urls = history.getPreviousURLs();
}
else
{
urls = history.getNextURLs();
}
if (urls != null)
{
if (type == BACK) {
for (int i=urls.length-1 ; i>=0 ; i--)
{
if (urls[i] != null)
{
historyList.add(new HistoryListActionHandler(urls[i]));
}
}
}
else
{
for (HelpHistoryModel.HistoryEntry url : urls)
{
if (url != null)
historyList.add(new HistoryListActionHandler(url));
}
}
historyList.show((JComponent)evt.getSource(),0,0);
}
} //}}}
} //}}}
//{{{ HistoryListActionHandler class
class HistoryListActionHandler extends AbstractAction
{
HelpHistoryModel.HistoryEntry entry;
//{{{ HistoryListActionHandler constructor
HistoryListActionHandler(HelpHistoryModel.HistoryEntry entry)
{
super(entry.title);
this.entry = entry;
this.putValue(Action.ACTION_COMMAND_KEY,entry.url + ':' + entry.scrollPosition);
} //}}}
//{{{ actionPerformed() method
public void actionPerformed(ActionEvent ae)
{
getParentHistoryButton().actionPerformed(ae);
history.setCurrentEntry(entry);
} //}}}
} //}}}
//}}}
}