package demo.view;

import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JPopupMenu;

import javax.swing.JToolBar;
import y.base.Node;

import y.util.GraphHider;
import y.view.PopupMode;


/** 
 *  Demonstrates how to hide/unhide nodes using y.util.GraphHider.
 *  To hide a node use the popup menu by right clicking a node.
 *  To unhide all nodes use the toolbar button.
 */
public class GraphHiderDemo extends ViewActionDemo {
  GraphHider hider = new GraphHider(view.getGraph2D());
  
  public GraphHiderDemo() {
    //add a popup child mode to editMode (one that listens to the right mouse click
    //and pops up context sensitive menues)
    editMode.setPopupMode(new DemoPopupMode());
  }
  
  /**
   * Creates a toolbar for this demo.
   */
  protected JToolBar createToolBar() {
    JToolBar bar = new JToolBar();
    bar.add(new UnhideNodes());
    return bar;
  }
  
  class DemoPopupMode extends PopupMode {
    /** Popup menu for a hit node */
    public JPopupMenu getNodePopup(Node v) {
      JPopupMenu pm = new JPopupMenu();
      pm.add(new HideNode(v));
      return pm;
    }
  }
  
  /**
   * Action that hides a node
   */
  class HideNode extends AbstractAction {
    Node v;
    
    HideNode(Node v) {
      super("Hide Node");
      this.v = v;
    }
    
    public void actionPerformed(ActionEvent e) {
      hider.hide(v);
      view.updateView();
    }
  }
  
  /**
   * Action that unhides all nodes
   */
  class UnhideNodes extends AbstractAction {
    UnhideNodes(){
      super("Unhide Nodes");
    }
    public void actionPerformed(ActionEvent e) {
      hider.unhideAll();
      view.updateView();
    }
  }
  
  public static void main(String args[]) {
    GraphHiderDemo demo = new GraphHiderDemo();
    demo.start("GraphHider Demo");
  }
}
