/*
* Copyright 2003,2004 Colin Crist
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package hermes.browser.components;
import hermes.browser.IconCache;
import hermes.browser.JTableButtonMouseListener;
import hermes.browser.JTableButtonRenderer;
import hermes.browser.model.ActionsPanelTableModel;
import hermes.browser.tasks.Task;
import hermes.browser.tasks.TaskListener;
import hermes.browser.tasks.TaskSupport;
import hermes.swing.SwingRunner;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import org.apache.log4j.Category;
/**
* The panel that shows the list of currently running actions
*
* @author colincrist@hermesjms.com
* @version $Id: ActionsPanel.java,v 1.7 2005/05/19 16:16:10 colincrist Exp $
*/
public class ActionsPanel extends JTable implements TaskListener
{
private static final long serialVersionUID = 1L;
private static final Category cat = Category.getInstance(ActionsPanel.class);
private final ActionsPanelTableModel actionsTableModel = new ActionsPanelTableModel();
private final Map<Task, Vector> rowInfo = new HashMap<Task, Vector>();
private final Map<Vector, Task> taskInfo = new HashMap<Vector, Task>();
public ActionsPanel()
{
super();
init();
TaskSupport.addGlobalListener(this);
}
/**
* Plumb all the Swing stuff together
*/
public void init()
{
setModel(actionsTableModel);
setDefaultRenderer(JButton.class, new JTableButtonRenderer(getDefaultRenderer(JButton.class)));
addMouseListener(new JTableButtonMouseListener(this));
getColumnModel().getColumn(0).setMaxWidth(20);
getColumnModel().getColumn(1).setMaxWidth(20);
setRowHeight(20);
addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
if ( e.getClickCount() == 2)
{
maybeChangeFocus(e);
}
}
});
}
/**
* If there is a double click on the row then switch that window to the
* front
*/
public void maybeChangeFocus(MouseEvent e)
{
}
public void onStarted(final Task task)
{
SwingRunner.invokeLater(new Runnable()
{
public void run()
{
final Vector<Object> row = new Vector<Object>();
final JButton stopButton = new JButton(IconCache.getIcon("hermes.stop"));
stopButton.setToolTipText("Stop");
row.add(task.getIcon());
row.add(stopButton);
row.add(task.getTitle());
rowInfo.put(task, row);
taskInfo.put(row, task);
if ( task.isRunning())
{
actionsTableModel.addRow(row);
stopButton.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
task.stop();
}
});
}
}
});
}
public void onStatus(Task task, String status)
{
}
public void onStopped(final Task task)
{
SwingRunner.invokeLater(new Runnable()
{
public void run()
{
final Vector oldRow = (Vector) rowInfo.get(task);
if ( task != null)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
actionsTableModel.removeRow(oldRow);
rowInfo.remove(task);
taskInfo.remove(oldRow);
}
});
}
}
});
}
public void onThrowable(Task task, Throwable t)
{
// TODO Auto-generated method stub
}
}