package me.chenyi.mm.ui;
import javax.swing.*;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
import java.awt.*;
import be.pwnt.jflow.*;
import be.pwnt.jflow.Shape;
import be.pwnt.jflow.event.ShapeEvent;
import be.pwnt.jflow.event.ShapeListener;
import me.chenyi.jython.ScriptEnvironment;
import me.chenyi.jython.ScriptLibrary;
import me.chenyi.jython.ScriptTriggerType;
import me.chenyi.jython.ScriptUtilities;
import me.chenyi.mm.flow.MovieFlowConfiguration;
import me.chenyi.mm.flow.MovieFlowModel;
import me.chenyi.mm.flow.NodePicture;
import me.chenyi.mm.model.Node;
/**
* Class description goes here
*
* @author $Author:$
* @version $Revision:$
*/
public class MovieMainPanel extends CurtainPagePanel
{
private MovieDetailPanel detailPanel;
private JFlowPanel flowPanel;
private EventAdapter ea;
public MovieMainPanel(ICurtainController curtainController)
{
super(curtainController);
ea = new EventAdapter();
setLayout(new GridBagLayout());
setBorder(BorderFactory.createLineBorder(Color.ORANGE));
GridBagConstraints gbc = new GridBagConstraints(0, 0, 1, 1, 1, 0, GridBagConstraints.NORTHWEST,
GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0);
detailPanel = new MovieDetailPanel();
add(detailPanel, gbc);
gbc.gridy ++;
gbc.weighty = 1;
MovieFlowModel flowModel = new MovieFlowModel();
flowModel.addListDataListener(ea);
flowPanel = new JFlowPanel(new MovieFlowConfiguration(), flowModel);
flowPanel.addShapeListener(ea);
add(flowPanel, gbc);
updateDetailInfoBySelection();
}
private void updateDetailInfoBySelection()
{
Shape shape = flowPanel.getCenterShape();
if(shape instanceof NodePicture)
{
NodePicture nodePicture = (NodePicture)shape;
Node node = nodePicture.getNode();
if(node != null)
{
detailPanel.setNode(node);
ScriptEnvironment.getInstance().setCurrentMovieId(node.getId());
ScriptUtilities.executeScripts(ScriptTriggerType.OnMovieSelected);
}
}
}
private class EventAdapter implements ShapeListener, ListDataListener
{
@Override
public void shapeActivated(ShapeEvent e)
{
System.out.println("MovieMainPanel$EventAdapter.shapeActivated");
}
@Override
public void shapeDeactivated(ShapeEvent e)
{
}
@Override
public void shapeCentered(ShapeEvent e)
{
updateDetailInfoBySelection();
}
@Override
public void shapeClicked(ShapeEvent e)
{
// System.out.println("MovieMainPanel$EventAdapter.shapeClicked");
flowPanel.scrollToShape(e.getShape());
}
@Override
public void intervalAdded(ListDataEvent e)
{
System.out.println("MovieMainPanel$EventAdapter.intervalAdded");
}
@Override
public void intervalRemoved(ListDataEvent e)
{
System.out.println("MovieMainPanel$EventAdapter.intervalRemoved");
}
@Override
public void contentsChanged(ListDataEvent e)
{
System.out.println("MovieMainPanel$EventAdapter.contentsChanged");
}
}
}