/*
*
*/
package captor.windowsystem.formcomponent.ncp;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import captor.lib.intl.MyIntl;
import captor.modelsystem.Model;
import captor.windowsystem.main.locationPane.util.CustomRenderer;
import captor.windowsystem.main.locationPane.util.FormPath;
import captor.windowsystem.util.IconUtil;
import captor.windowsystem.util.TreeUtil;
public class TreePanel extends JPanel implements ActionListener {
public static final long serialVersionUID = 108;
JPanel controlPane, control, historyPane;
DefaultMutableTreeNode root;
DefaultMutableTreeNode []level;
JTree tree;
JScrollPane treePane;
JPanel mainPane;
JSplitPane splitPane;
JLabel label = new JLabel(MyIntl.NAVIGATOR_LABEL);
JButton button = new JButton("x");
int currentPosition = 28;
BodyPanel bodyPanel;
DefaultMutableTreeNode sourceNode;
private Model model;
public TreePanel(Model model, DefaultMutableTreeNode sourceNode) {
this.model = model;
this.sourceNode = sourceNode;
create();
}
public void create() {
FormPath pp = new FormPath();
root = new DefaultMutableTreeNode(pp);
pp.setTreeNode(root);
createTree();
treePane = new JScrollPane(tree);
mainPane = new JPanel();
mainPane.setLayout(new BoxLayout(mainPane, BoxLayout.X_AXIS));
mainPane.add(treePane);
mainPane.add(Box.createRigidArea(new Dimension(2,2)));
//------------------------------
label = new JLabel(MyIntl.NAVIGATOR_LABEL);
button = new JButton();
button.setBackground(Color.white);
Dimension d = new Dimension(18, 19);
button.setPreferredSize(d);
button.setMaximumSize(d);
Icon icon = IconUtil.getIcon("closeArrow.gif");
button.setIcon(icon);
button.addActionListener(this);
JPanel titlePanel = new JPanel();
titlePanel.setLayout(new BoxLayout(titlePanel, BoxLayout.Y_AXIS));
titlePanel.add(Box.createRigidArea(new Dimension(2,6)));
titlePanel.add(label);
JPanel hHeader = new JPanel();
hHeader.setMaximumSize(new Dimension(600, 30));
hHeader.setLayout(new BoxLayout(hHeader, BoxLayout.X_AXIS));
hHeader.add(titlePanel);
hHeader.add(Box.createHorizontalGlue());
hHeader.add(button);
hHeader.add(Box.createRigidArea(new Dimension(2,3)));
label.setAlignmentX(Component.LEFT_ALIGNMENT);
mainPane.setAlignmentX(Component.LEFT_ALIGNMENT);
hHeader.setAlignmentX(Component.LEFT_ALIGNMENT);
//------------------------------
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
add(Box.createRigidArea(new Dimension(5,12)));
add(hHeader);
add(Box.createRigidArea(new Dimension(5,1)));
add(mainPane);
add(Box.createRigidArea(new Dimension(5,3)));
}
//-------------------------------------------------------------------------
private void createTree() {
tree = new JTree(root);
DefaultTreeModel treeModel = null;
CustomRenderer customRenderer = new CustomRenderer(model);
DefaultMutableTreeNode root = (DefaultMutableTreeNode)tree.getModel().getRoot();
treeModel = new DefaultTreeModel(root);
tree = new JTree(treeModel);
tree.setCellRenderer(customRenderer);
tree.setShowsRootHandles(false);
loadNagivatorTree();
}
//-------------------------------------------------------------------------
public void loadNagivatorTree() {
DefaultMutableTreeNode mainRoot = (DefaultMutableTreeNode) model.getGui().getTree().getModel().getRoot();
Object obj = sourceNode.getUserObject();
FormPath fp = null;
if ( obj instanceof FormPath ) {
fp = (FormPath) obj;
}
if ( fp == null )
return;
for ( int i = 0; i < mainRoot.getChildCount(); i++ ) {
if ( fp.getInteraction() == i ) {
DefaultMutableTreeNode mainInteractionNode = (DefaultMutableTreeNode) mainRoot.getChildAt(i);
makeInteraction(mainInteractionNode, i);
TreeUtil.expandTree(tree);
}
}
}
private void makeInteraction(DefaultMutableTreeNode mainInteractionNode, int interactionNumber) {
DefaultMutableTreeNode newInteraction = new DefaultMutableTreeNode("Interaction " + new Integer(interactionNumber + 1).toString());
root.insert(newInteraction, root.getChildCount());
for ( int i = 0; i < mainInteractionNode.getChildCount(); i++ ) {
DefaultMutableTreeNode mainCaptorProjectNode = (DefaultMutableTreeNode) mainInteractionNode.getChildAt(i);
makeCaptorProject(mainCaptorProjectNode, newInteraction);
}
}
private void makeCaptorProject(DefaultMutableTreeNode mainCaptorProjectNode, DefaultMutableTreeNode parentNode) {
for ( int i = 0; i < mainCaptorProjectNode.getChildCount(); i++ ) {
DefaultMutableTreeNode currentNode = (DefaultMutableTreeNode) mainCaptorProjectNode.getChildAt(i);
Object obj = currentNode.getUserObject();
if ( obj instanceof FormPath ) {
FormPath fp = (FormPath) obj;
FormPath newFP = fp.getCopy();
newFP.setTreeNode(null);
newFP.setCard(fp.getCard());
DefaultMutableTreeNode newFormNode = new DefaultMutableTreeNode(newFP);
newFP.setTreeNode(newFormNode);
parentNode.insert(newFormNode, parentNode.getChildCount());
}
}
}
//-------------------------------------------------------------------------
public void actionPerformed(ActionEvent e) {
if ( mainPane.isVisible() ) {
mainPane.setVisible(false);
label.setVisible(false);
currentPosition = splitPane.getDividerLocation();
splitPane.setDividerLocation(28);
splitPane.setEnabled(false);
Icon icon = IconUtil.getIcon("openArrow.gif");
button.setIcon(icon);
}
else {
mainPane.setVisible(true);
label.setVisible(true);
splitPane.setEnabled(true);
Icon icon = IconUtil.getIcon("closeArrow.gif");
button.setIcon(icon);
splitPane.setDividerLocation(currentPosition);
}
}
//-------------------------------------------------------------------------
/**
* @param splitPane The splitPane to set.
*/
public void setSplitPane(JSplitPane splitPane) {
this.splitPane = splitPane;
}
/**
* @return Returns the tree.
*/
public JTree getTree() {
return tree;
}
/**
* @param bodyPanel The bodyPanel to set.
*/
public void setBodyPanel(BodyPanel bodyPanel) {
this.bodyPanel = bodyPanel;
tree.addMouseListener(new TreeListener(tree, bodyPanel));
}
//-------------------------------------------------------------------------
}