예제 #1
0
 /** Draws the edge structure of the tree */
 public void drawEdges(Graphics2D gg) {
   gg.setPaint(Color.black);
   Enumeration nodeList = argument.getBreadthFirstTraversal().elements();
   // For each vertex...
   while (nodeList.hasMoreElements()) {
     // Get its edge list...
     TreeVertex vertex = (TreeVertex) nodeList.nextElement();
     Enumeration edges = vertex.getEdgeList().elements();
     // For each edge in the list...
     while (edges.hasMoreElements()) {
       TreeEdge edge = (TreeEdge) edges.nextElement();
       // If we have several vertices on layer 0, only draw
       // edges for layers below that
       if (!(argument.isMultiRoots() && vertex.getLayer() == 0)) {
         // If the edge has been selected with the mouse,
         // use a thick line
         if (edge.isSelected()) {
           gg.setStroke(selectStroke);
         }
         gg.draw(edge.getShape(this));
         // If we used a thick line, reset the stroke to normal
         // line for next edge.
         if (edge.isSelected()) {
           gg.setStroke(solidStroke);
         }
         TreeVertex edgeSource = edge.getDestVertex();
       }
     }
   }
 }
예제 #2
0
 /**
  * Fills a SubtreeFrame with info about the subtree. Used to display info when user right clicks
  * on an existing subtree.
  */
 public void buildSubtreeFrame(SubtreeFrame sFrame) {
   // Clear visited flag on all vertices in the tree
   // and determine the layer number of the root node
   int highestLayer = 100;
   Enumeration edges = m_edgeList.elements();
   while (edges.hasMoreElements()) {
     TreeEdge edge = (TreeEdge) edges.nextElement();
     edge.getDestVertex().setVisited(false);
     edge.getSourceVertex().setVisited(false);
     if (edge.getSourceVertex().getLayer() < highestLayer) {
       highestLayer = edge.getSourceVertex().getLayer();
     }
   }
   // Create list of premises and conclusion and assign
   // to text areas in the dialog
   Vector premiseList = new Vector();
   String conclusion = "";
   String criticalQuestions = "";
   edges = m_edgeList.elements();
   while (edges.hasMoreElements()) {
     TreeEdge edge = (TreeEdge) edges.nextElement();
     TreeVertex source = edge.getSourceVertex();
     TreeVertex dest = edge.getDestVertex();
     if (!source.getVisited()) {
       if (source.getLayer() == highestLayer) {
         conclusion += (String) source.getLabel();
       } else {
         premiseList.add((String) source.getLabel());
       }
       source.setVisited(true);
     }
     if (!dest.getVisited()) {
       premiseList.add((String) dest.getLabel());
       dest.setVisited(true);
     }
   }
   sFrame.setPremisesText(premiseList);
   sFrame.setConclusionText(conclusion);
   sFrame.loadArgTypeCombo();
   // Assign the correct argument type to the combo box
   for (int index = 0; index < sFrame.selectArgumentCombo.getItemCount(); index++) {
     if (m_argumentType.getName().equals(sFrame.selectArgumentCombo.getItemAt(index))) {
       sFrame.selectArgumentCombo.setSelectedIndex(index);
       sFrame.selectArgumentCombo.setEditable(false);
       break;
     }
   }
   // Construct list of critical questions
   //    Enumeration quesList = m_argumentType.getCriticalQuestions().elements();
   //    while (quesList.hasMoreElements()) {
   //      criticalQuestions += (String)quesList.nextElement() +
   //          "\r\n _____________________________ \r\n";
   //   }
   sFrame.updateTextBoxes();
 }
예제 #3
0
 public TreeVertex findRoot() {
   if (m_root != null) return m_root;
   int rootLayer = 1000;
   TreeVertex root = null;
   for (int i = 0; i < m_vertexList.size(); i++) {
     TreeVertex vertex = (TreeVertex) m_vertexList.elementAt(i);
     if (vertex.getLayer() < rootLayer) {
       rootLayer = vertex.getLayer();
       root = vertex;
     }
   }
   return root;
 }
예제 #4
0
 private void recurseSelectEdges(TreeVertex root) {
   Vector edges = root.getEdgeList();
   for (int i = 0; i < edges.size(); i++) {
     TreeEdge edge = (TreeEdge) edges.elementAt(i);
     TreeVertex dest = edge.getDestVertex();
     if (m_vertexList.contains(dest)) {
       edge.setSelected(true);
       recurseSelectEdges(dest);
     }
   }
 }
예제 #5
0
 /*
  * Creates a line of width EDGE_SELECT_WIDTH for each edge
  * and tests if mouse click was in that Shape's boundary.
  * Returns the edge if one was selected, null otherwise.
  */
 public TreeEdge testEdgeShapes(MouseEvent event) {
   if (argument == null || argument.getTree() == null) return null;
   double x = event.getX();
   double y = event.getY();
   BasicStroke edgeWidth = new BasicStroke(EDGE_SELECT_WIDTH);
   if (argument.getBreadthFirstTraversal() == null) return null;
   Enumeration nodeList = argument.getBreadthFirstTraversal().elements();
   while (nodeList.hasMoreElements()) {
     TreeVertex vertex = (TreeVertex) nodeList.nextElement();
     if (argument.isMultiRoots() && vertex.getLayer() == 0) continue;
     Enumeration edges = vertex.getEdgeList().elements();
     while (edges.hasMoreElements()) {
       TreeEdge edge = (TreeEdge) edges.nextElement();
       Shape shape = edge.getShape(this);
       Shape wideEdge = edgeWidth.createStrokedShape(shape);
       TreeVertex child = edge.getDestVertex();
       if (wideEdge.contains(x, y)) {
         edge.setSelected(!edge.isSelected());
         return edge;
       }
     }
   }
   return null;
 }
예제 #6
0
 /** Build a shape for the entire subtree by joining together the shapes for each of its edges. */
 public Shape constructFullTextShape(DiagramBase diagram) {
   GeneralPath shape = new GeneralPath();
   Enumeration edges = m_edgeList.elements();
   while (edges.hasMoreElements()) {
     TreeEdge edge = (TreeEdge) edges.nextElement();
     if (!edge.visible) {
       continue;
     }
     Shape edgeShape = edge.getSchemeShape(diagram);
     PathIterator path = edgeShape.getPathIterator(null);
     shape.append(path, false);
     TreeVertex vertex = edge.getSourceVertex();
     if (!vertex.isVirtual()) {
       shape.append(vertex.getShape(diagram).getPathIterator(null), false);
     }
     vertex = edge.getDestVertex();
     if (!vertex.isVirtual()) {
       shape.append(vertex.getShape(diagram).getPathIterator(null), false);
     }
   }
   BasicStroke stroke = new BasicStroke(20, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER);
   shapeTable.put(diagram, stroke.createStrokedShape(shape));
   return (Shape) shapeTable.get(diagram);
 }
예제 #7
0
  /** Draw vertices on top of the edge structure */
  public void drawNodes(Graphics2D gg) {
    Enumeration nodeList = argument.getBreadthFirstTraversal().elements();
    // Run through the traversal and draw each vertex
    // using an Ellipse2D
    // The draw point has been determined previously in
    // calcNodeCoords()
    while (nodeList.hasMoreElements()) {
      TreeVertex vertex = (TreeVertex) nodeList.nextElement();
      // Don't draw virtual nodes
      if (vertex.isVirtual()) continue;

      // If tree is incomplete and we're on the top layer, skip it
      if (argument.isMultiRoots() && vertex.getLayer() == 0) continue;

      Point corner = vertex.getDrawPoint();
      Shape node = new Ellipse2D.Float(corner.x, corner.y, NODE_DIAM, NODE_DIAM);
      vertex.setShape(node, this);

      // Fill the interior of the node with vertex's fillPaint
      gg.setPaint(vertex.fillPaint);
      gg.fill(node);

      // Draw the outline with vertex's outlinePaint; bold if selected
      gg.setPaint(vertex.outlinePaint);
      if (vertex.isSelected()) {
        gg.setStroke(selectStroke);
      } else {
        gg.setStroke(solidStroke);
      }
      gg.draw(node);

      // Draw the short label on top of the vertex
      gg.setPaint(vertex.textPaint);
      String shortLabelString = new String(vertex.getShortLabel());
      if (shortLabelString.length() == 1) {
        gg.setFont(labelFont1);
        gg.drawString(shortLabelString, corner.x + NODE_DIAM / 4, corner.y + 3 * NODE_DIAM / 4);
      } else if (shortLabelString.length() == 2) {
        gg.setFont(labelFont2);
        gg.drawString(shortLabelString, corner.x + NODE_DIAM / 5, corner.y + 3 * NODE_DIAM / 4);
      }
    }
  }
예제 #8
0
 public void deleteCycle(TreeVertex startVertex, TreeVertex endVertex) {
   displayFrame.controlFrame.setMessageLabelText("Adding this edge would create a cycle.");
   endVertex.deleteEdge(startVertex);
   startVertex.setHasParent(false);
   repaint();
 }