/** Create a node at the most recent popup location */
  private void createNode(int x, int y) {
    QueryNode qn = queryGraph.createNode();
    Node node = new Node(this, qn);

    // make it the head node if it is currently the only node
    if (queryGraph.getNumNodes() == 1) {
      node.setHeadNode(true);
      setHeadNode(node);
    }

    // place on the screen
    node.setLocation(x, y);
    this.add(node);
    this.repaint();

    // add the popup
    NodeListener listener = new NodeListener(node, this);
    node.addMouseListener(listener);
    node.addMouseMotionListener(listener);

    // select this new node
    selectNode(node);
    fireEvent(node, GRAPH_CHANGED);

    System.out.println(qn.label);
  }
  /*
   * Get the text query represented by the underlying graph
   */
  public String getQuery() {
    if (queryGraph.getNumNodes() == 0) return "";

    return queryGraph.toTregexQuery(headNode.getQueryNode());
  }
 private void updatePopupMenu() {
   addEdgeItem.setEnabled(queryGraph.getNumNodes() > 1);
   if (targetNode != null) deleteNodeItem.setEnabled(!targetNode.isHeadNode());
 }