/*
* @(#)RedBlackTreeJPanel.java
*
* Last Modified: 9/15/01
*/
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.*;
import java.beans.*;
/** * This class provides the panel for a RedBlackTree
. It keeps the graphics for drawing
* the tree and the image for redrawing. It also keeps a timer for the animation and all changes
* to the tree proceed through the panel.
*
*
* @author Corey Sanders
* @version 1.1 9/15/01
*/
public class RedBlackTreeJPanel extends BSTTreeJPanel {
/**
* Sole Constructor. It simply calls the super constructor and then calls
* setTree
with the ANIMATING_BST_TREE_TYPE.
*/
public RedBlackTreeJPanel() {
super();
setTree(new RedBlackTreeHead(BSTTree.ANIMATING_BST_TREE_TYPE));
}
/**
* Draws the current drawing node using the specific stoke and paint for the red links.
*/
public void drawDrawingNode() {
super.drawDrawingNode();
NodeAndLinkDrawingJPanel drawingPanel = colorOptionsPanel.getDrawingPanel();
drawingPanel.setBackground(PaintSettings.getColor(backgroundColor));
if (((String)functionJComboBox.getSelectedItem()).equals(DRAWING)) {
drawingPanel.getNode().setSettings(NodeSettings.getScheme(drawingNodeSettings));
((DrawableKey)drawingPanel.getNode().getValue()).setSettings(KeySettings.getScheme(drawingKeySettings));
}
drawingPanel.getNode().getSettings().setRightLinkStroke((BasicStroke)((RedBlackTreeHead)getTree()).getRedLinkStroke());
drawingPanel.getNode().getSettings().setRightLinkPaint(((RedBlackTreeHead)getTree()).getRedLinkPaint().getPaint());
drawingPanel.setDrawTree(true);
drawingPanel.repaint();
}
/**
* Constructs a popupmenu, using the actionlistener passed. The popupMenu
* contains all of the options available through the current tree. For this
* class, no items are added, making it necessary to overide the method.
*
* @param actionListener the listener add to the actions of all the items made in the menu.
*
* @return JPopupMenu which is the menu constructed within the panel.
*/
public JPopupMenu makeJPopupMenu(ActionListener actionlistener) {
JPopupMenu popupMenu = new JPopupMenu();
/* JMenuItem deleteItem = new JMenuItem("Delete Node");
deleteItem.setBackground(Color.black);
deleteItem.setForeground(Color.white);
deleteItem.addActionListener(actionlistener);
deleteItem.setActionCommand(OptionEvent.DELETE_CLICK);*/
JMenuItem selectItem = new JMenuItem("Select");
selectItem.addActionListener(actionlistener);
selectItem.setActionCommand(OptionEvent.SELECT_CLICK);
//popupMenu.add(deleteItem);
popupMenu.add(selectItem);
return popupMenu;
}
/**
* Constructs an error type if the tree is attempted to balance.
*/
protected void makeBalanceErrorMessage() {
String errorMsg = new String("Red-Black trees are\nalready balanced.");
messageAction(TreeMessageEvent.ERROR_MESSAGE, errorMsg.toString());
}
/**
* Constructs an error type if a node is attempted to delete.
*/
protected void makeDeleteErrorMessage() {
String errorMsg = new String("Red-Black tree do deletion\nnot yet supported.");
messageAction(TreeMessageEvent.ERROR_MESSAGE, errorMsg.toString());
}
/**
* RotateUp command. No action.
*
* @param node Tree to rotateUp.
*/
public void rotateUpCommand(Tree node) {
}
/**
* RotateToTop command. No action.
*
* @param node Tree to rotateToTop.
*/
public void rotateToTopCommand(Tree node) {
}
/**
* RotateUpDouble command. No action.
*
* @param node Tree to rotateUpDouble.
*/
public void rotateUpDoubleCommand(Tree node) {
}
/**
* Splay command. No action.
*
* @param node Tree to splay.
*/
public void splayCommand(Tree node) {
}
/**
* Balance command. No action.
*
* @param node Tree to balance.
*/
public void balanceCommand(Tree node) {
makeBalanceErrorMessage();
}
/**
* Delete command. No action.
*
* @param node Tree to delete.
*/
public void deleteCommand(String text) {
makeDeleteErrorMessage();
}
/**
* Change Display Command. No action....yet!
*/
public void displayChangeCommand() {
}
}