Package org.hsqldb.util

Source Code of org.hsqldb.util.Tree

package org.hsqldb.util;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Event;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Panel;
import java.awt.Scrollbar;
import java.awt.SystemColor;
import java.awt.Toolkit;
import java.util.Vector;

class Tree extends Panel
{
  private static Font fFont = new Font("Dialog", 0, 12);
  private static FontMetrics fMetrics = Toolkit.getDefaultToolkit().getFontMetrics(fFont);
  private static int iRowHeight = getMaxHeight(fMetrics);
  private static int iIndentWidth = 12;
  private int iMaxTextLength;
  private Dimension dMinimum;
  private Graphics gImage;
  private Image iImage;
  private int iWidth;
  private int iHeight;
  private int iFirstRow;
  private int iTreeWidth;
  private int iTreeHeight;
  private int iX;
  private int iY;
  private Vector vData = new Vector();
  private int iRowCount;
  private Scrollbar sbHoriz;
  private Scrollbar sbVert;
  private int iSbWidth;
  private int iSbHeight;

  Tree()
  {
    setLayout(null);
    this.sbHoriz = new Scrollbar(0);
    add(this.sbHoriz);
    this.sbVert = new Scrollbar(1);
    add(this.sbVert);
  }

  public void setMinimumSize(Dimension paramDimension)
  {
    this.dMinimum = paramDimension;
  }

  public void setBounds(int paramInt1, int paramInt2, int paramInt3, int paramInt4)
  {
    super.setBounds(paramInt1, paramInt2, paramInt3, paramInt4);
    this.iSbHeight = this.sbHoriz.getPreferredSize().height;
    this.iSbWidth = this.sbVert.getPreferredSize().width;
    this.iHeight = (paramInt4 - this.iSbHeight);
    this.iWidth = (paramInt3 - this.iSbWidth);
    this.sbHoriz.setBounds(0, this.iHeight, this.iWidth, this.iSbHeight);
    this.sbVert.setBounds(this.iWidth, 0, this.iSbWidth, this.iHeight);
    adjustScroll();
    this.iImage = null;
    repaint();
  }

  public void removeAll()
  {
    this.vData = new Vector();
    this.iRowCount = 0;
    adjustScroll();
    this.iMaxTextLength = 10;
    repaint();
  }

  public void addRow(String paramString1, String paramString2, String paramString3, int paramInt)
  {
    String[] arrayOfString = new String[4];
    if (paramString2 == null)
      paramString2 = "";
    arrayOfString[0] = paramString1;
    arrayOfString[1] = paramString2;
    arrayOfString[2] = paramString3;
    arrayOfString[3] = String.valueOf(paramInt);
    this.vData.addElement(arrayOfString);
    int i = fMetrics.stringWidth(paramString2);
    if (i > this.iMaxTextLength)
      this.iMaxTextLength = i;
    this.iRowCount += 1;
  }

  public void addRow(String paramString1, String paramString2)
  {
    addRow(paramString1, paramString2, null, 0);
  }

  public void update()
  {
    adjustScroll();
    repaint();
  }

  void adjustScroll()
  {
    this.iTreeHeight = (iRowHeight * (this.iRowCount + 1));
    this.iTreeWidth = (this.iMaxTextLength * 2);
    this.sbHoriz.setValues(this.iX, this.iWidth, 0, this.iTreeWidth);
    int i = this.iY / iRowHeight;
    int j = this.iHeight / iRowHeight;
    this.sbVert.setValues(i, j, 0, this.iRowCount + 1);
    this.iX = this.sbHoriz.getValue();
    this.iY = (iRowHeight * this.sbVert.getValue());
  }

  public boolean handleEvent(Event paramEvent)
  {
    switch (paramEvent.id)
    {
    case 601:
    case 602:
    case 603:
    case 604:
    case 605:
      this.iX = this.sbHoriz.getValue();
      this.iY = (iRowHeight * this.sbVert.getValue());
      repaint();
      return true;
    }
    return super.handleEvent(paramEvent);
  }

  public void paint(Graphics paramGraphics)
  {
    if ((paramGraphics == null) || (this.iWidth <= 0) || (this.iHeight <= 0))
      return;
    paramGraphics.setColor(SystemColor.control);
    paramGraphics.fillRect(this.iWidth, this.iHeight, this.iSbWidth, this.iSbHeight);
    if (this.iImage == null)
    {
      this.iImage = createImage(this.iWidth, this.iHeight);
      this.gImage = this.iImage.getGraphics();
      this.gImage.setFont(fFont);
    }
    this.gImage.setColor(Color.white);
    this.gImage.fillRect(0, 0, this.iWidth, this.iHeight);
    int[] arrayOfInt = new int[100];
    String[] arrayOfString1 = new String[100];
    arrayOfString1[0] = "";
    int i = 0;
    int j = iRowHeight;
    j -= this.iY;
    int k = 0;
    for (int m = 0; m < this.iRowCount; m++)
    {
      String[] arrayOfString2 = (String[])this.vData.elementAt(m);
      String str1 = arrayOfString2[0];
      String str2 = arrayOfString2[1];
      String str3 = arrayOfString2[2];
      for (int n = i; (n > 0) && (!str1.startsWith(arrayOfString1[n])); n--);
      if (arrayOfString1[n].length() < str1.length())
        n++;
      if ((k != 0) && (n > i))
        continue;
      k = (str3 != null) && (str3.equals("+")) ? 1 : 0;
      arrayOfString1[n] = str1;
      int i1 = iIndentWidth * n - this.iX;
      this.gImage.setColor(Color.lightGray);
      this.gImage.drawLine(i1, j, i1 + iIndentWidth, j);
      this.gImage.drawLine(i1, j, i1, arrayOfInt[n]);
      arrayOfInt[(n + 1)] = j;
      int i2 = j + iRowHeight / 3;
      int i3 = i1 + iIndentWidth * 2;
      if (str3 != null)
      {
        arrayOfInt[(n + 1)] += 4;
        int i4 = Integer.parseInt(arrayOfString2[3]);
        this.gImage.setColor(i4 == 0 ? Color.white : new Color(i4));
        this.gImage.fillRect(i1 + iIndentWidth - 3, j - 3, 7, 7);
        this.gImage.setColor(Color.black);
        this.gImage.drawRect(i1 + iIndentWidth - 4, j - 4, 8, 8);
        this.gImage.drawLine(i1 + iIndentWidth - 2, j, i1 + iIndentWidth + 2, j);
        if (str3.equals("+"))
          this.gImage.drawLine(i1 + iIndentWidth, j - 2, i1 + iIndentWidth, j + 2);
      }
      else
      {
        i3 -= iIndentWidth;
      }
      this.gImage.setColor(Color.black);
      this.gImage.drawString(str2, i3, i2);
      i = n;
      j += iRowHeight;
    }
    paramGraphics.drawImage(this.iImage, 0, 0, this);
  }

  public void update(Graphics paramGraphics)
  {
    paint(paramGraphics);
  }

  public Dimension preferredSize()
  {
    return this.dMinimum;
  }

  public Dimension getPreferredSize()
  {
    return this.dMinimum;
  }

  public Dimension getMinimumSize()
  {
    return this.dMinimum;
  }

  public Dimension minimumSize()
  {
    return this.dMinimum;
  }

  public boolean mouseDown(Event paramEvent, int paramInt1, int paramInt2)
  {
    if ((iRowHeight == 0) || (paramInt1 > this.iWidth) || (paramInt2 > this.iHeight))
      return true;
    paramInt2 += iRowHeight / 2;
    String[] arrayOfString1 = new String[100];
    arrayOfString1[0] = "";
    int i = 0;
    int j = iRowHeight;
    int k = 0;
    int m = 0;
    paramInt2 += this.iY;
    String[] arrayOfString2;
    String str1;
    while (m < this.iRowCount)
    {
      arrayOfString2 = (String[])this.vData.elementAt(m);
      str1 = arrayOfString2[0];
      String str2 = arrayOfString2[2];
      for (int n = i; (n > 0) && (!str1.startsWith(arrayOfString1[n])); n--);
      if (arrayOfString1[n].length() < str1.length())
        n++;
      if ((k == 0) || (n <= i))
      {
        if ((j <= paramInt2) && (j + iRowHeight > paramInt2))
          break;
        arrayOfString1[n] = str1;
        k = (str2 != null) && (str2.equals("+")) ? 1 : 0;
        i = n;
        j += iRowHeight;
      }
      m++;
    }
    if ((m >= 0) && (m < this.iRowCount))
    {
      arrayOfString2 = (String[])this.vData.elementAt(m);
      str1 = arrayOfString2[2];
      if ((str1 != null) && (str1.equals("+")))
        str1 = "-";
      else if ((str1 != null) && (str1.equals("-")))
        str1 = "+";
      arrayOfString2[2] = str1;
      this.vData.setElementAt(arrayOfString2, m);
      repaint();
    }
    return true;
  }

  private static int getMaxHeight(FontMetrics paramFontMetrics)
  {
    return paramFontMetrics.getHeight() + 2;
  }
}

/* Location:           /home/mnovotny/projects/EMBEDDED_JBOSS_BETA3_COMMUNITY/embedded/output/lib/embedded-jboss/lib/thirdparty-all.jar
* Qualified Name:     org.hsqldb.util.Tree
* JD-Core Version:    0.6.0
*/
TOP

Related Classes of org.hsqldb.util.Tree

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.