home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 139 / dpcs0999.iso / Web / CFserver / data1.cab / Java / allaire / controls / CFTreeItem.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-04-12  |  6.5 KB  |  340 lines

  1. package allaire.controls;
  2.  
  3. import java.applet.Applet;
  4. import java.applet.AppletContext;
  5. import java.net.MalformedURLException;
  6. import java.net.URL;
  7. import java.net.URLEncoder;
  8. import netscape.application.AWTCompatibility;
  9. import netscape.application.Application;
  10. import netscape.application.Bitmap;
  11. import netscape.application.Color;
  12. import netscape.application.FontMetrics;
  13. import netscape.application.Graphics;
  14. import netscape.application.MouseEvent;
  15. import netscape.application.Rect;
  16. import netscape.util.Enumeration;
  17. import netscape.util.Vector;
  18.  
  19. public class CFTreeItem {
  20.    public static final int NOTCLICKED = 0;
  21.    public static final int HOTBOXCLICKED = 1;
  22.    public static final int IMAGECLICKED = 2;
  23.    public static final int TEXTCLICKED = 3;
  24.    public boolean m_exploded = true;
  25.    public boolean m_selected;
  26.    public CFTreeItem m_parent;
  27.    public int m_imageIndex;
  28.    public String m_caption = "";
  29.    public String m_internalCaption = "";
  30.    private boolean m_hasChildren;
  31.    private boolean m_hasSibling;
  32.    private boolean m_URLfromCodeBase;
  33.    private CFTree m_parentControl;
  34.    private int m_clickedState;
  35.    private int m_textWidth = -1;
  36.    private int m_xOffset = -1;
  37.    private int m_yOffset = -1;
  38.    private String m_URL = "";
  39.    private String m_URLDestination = "";
  40.    private Vector m_childItems;
  41.  
  42.    public void drawHotBox(Graphics var1, FontMetrics var2) {
  43.       var1.setColor(Color.white);
  44.       var1.fillRect(this.m_xOffset + 4, this.m_yOffset + 4, 9, 9);
  45.       var1.setColor(Color.gray);
  46.       var1.drawRect(this.m_xOffset + 4, this.m_yOffset + 4, 9, 9);
  47.       var1.setColor(Color.black);
  48.       var1.drawLine(this.m_xOffset + 6, this.m_yOffset + 8, this.m_xOffset + 10, this.m_yOffset + 8);
  49.       if (!this.m_exploded) {
  50.          var1.drawLine(this.m_xOffset + 8, this.m_yOffset + 6, this.m_xOffset + 8, this.m_yOffset + 10);
  51.       }
  52.  
  53.    }
  54.  
  55.    public CFTreeItem(CFTree var1, String var2) {
  56.       this.init();
  57.       this.m_caption = var2;
  58.       this.m_internalCaption = var2;
  59.       this.m_parentControl = var1;
  60.    }
  61.  
  62.    public CFTreeItem(CFTree var1, String var2, String var3) {
  63.       this.init();
  64.       this.m_caption = var2;
  65.       this.m_internalCaption = var3;
  66.       this.m_parentControl = var1;
  67.    }
  68.  
  69.    public int clickedState() {
  70.       return this.m_clickedState;
  71.    }
  72.  
  73.    public void draw(Graphics var1, FontMetrics var2, int var3, int var4, Vector var5, boolean var6) {
  74.       int var9 = 0;
  75.       this.m_yOffset = var3;
  76.       if (this.m_textWidth == -1) {
  77.          this.m_textWidth = var2.stringWidth(this.m_caption) + 2;
  78.       }
  79.  
  80.       if (this.m_parent != null) {
  81.          var9 += (var4 - 1) * 19;
  82.          var1.setColor(Color.gray);
  83.          var1.drawLine(var9 + 19, var3 + 8, var9 + 8, var3 + 8);
  84.          var1.drawLine(var9 + 8, var3 + 8, var9 + 8, this.m_parent.m_yOffset + 16);
  85.          var1.setColor(Color.black);
  86.          this.m_xOffset = var9;
  87.          if (this.m_hasChildren && !var6) {
  88.             var5.addElement(this);
  89.          }
  90.  
  91.          var9 += 19;
  92.       } else {
  93.          this.m_xOffset = 0;
  94.       }
  95.  
  96.       if (!var6) {
  97.          int var8 = this.m_exploded && this.m_hasChildren ? this.m_imageIndex + 1 : this.m_imageIndex;
  98.          Bitmap var7 = this.m_parentControl.bitmap(var8);
  99.          if (var7 != null && var7.isValid()) {
  100.             var1.drawBitmapAt(var7, var9, var3);
  101.          }
  102.  
  103.          var9 += 22;
  104.          if (this.m_selected) {
  105.             var1.setColor(new Color(0, 0, 128));
  106.             var1.fillRect(var9, var3 + 2, this.m_textWidth, 14);
  107.             var1.setColor(Color.white);
  108.          }
  109.  
  110.          if (this.m_URL.length() > 0 && this.m_parentControl.m_showURLs) {
  111.             if (!this.m_selected) {
  112.                var1.setColor(new Color(0, 0, 255));
  113.             }
  114.  
  115.             var1.drawLine(var9 + 1, var3 + 14, var9 + 1 + this.m_textWidth, var3 + 14);
  116.          }
  117.  
  118.          var1.drawString(this.m_caption, var9 + 1, var3 + 13);
  119.          this.m_parentControl.setExtents(var9 + 1 + this.m_textWidth, var3 + 16);
  120.          var1.setColor(Color.black);
  121.       }
  122.    }
  123.  
  124.    public String getCompletePath(String var1) {
  125.       String var3 = this.m_internalCaption;
  126.  
  127.       for(CFTreeItem var2 = this.m_parent; var2 != null; var2 = var2.m_parent) {
  128.          var3 = var2.m_internalCaption + var1 + var3;
  129.       }
  130.  
  131.       if (var3.endsWith(":")) {
  132.          var3 = var3 + "\\";
  133.       }
  134.  
  135.       return var3;
  136.    }
  137.  
  138.    public void setParent(CFTreeItem var1) {
  139.       this.m_parent = var1;
  140.    }
  141.  
  142.    public void select(boolean var1) {
  143.       if (this.m_URL.length() > 0) {
  144.          Applet var4 = AWTCompatibility.awtApplet();
  145.          AppletContext var5 = var4.getAppletContext();
  146.  
  147.          try {
  148.             String var6 = URLEncoder.encode(this.m_internalCaption);
  149.             String var7;
  150.             if (this.m_parentControl.m_appendKeys) {
  151.                if (this.m_URL.indexOf("?") > 0) {
  152.                   var7 = this.m_URL + "&CFTREEITEMKEY=" + var6;
  153.                } else {
  154.                   var7 = this.m_URL + "?CFTREEITEMKEY=" + var6;
  155.                }
  156.             } else {
  157.                var7 = this.m_URL;
  158.             }
  159.  
  160.             URL var3;
  161.             if (this.m_URLfromCodeBase) {
  162.                URL var8 = Application.application().codeBase();
  163.                String var9 = var8.getHost();
  164.                var3 = new URL(var8.getProtocol(), var9, var7);
  165.             } else {
  166.                URL var11 = var4.getDocumentBase();
  167.                if (var7.toLowerCase().startsWith("http://")) {
  168.                   var3 = new URL(var7);
  169.                } else {
  170.                   var3 = new URL(var11, var7);
  171.                }
  172.             }
  173.  
  174.             if (this.m_URLDestination.length() > 0) {
  175.                var5.showDocument(var3, this.m_URLDestination);
  176.             } else {
  177.                var5.showDocument(var3);
  178.             }
  179.          } catch (MalformedURLException var10) {
  180.          }
  181.       } else {
  182.          this.m_selected = var1;
  183.          Rect var2 = new Rect(this.m_xOffset, this.m_yOffset + 2, this.m_textWidth + 41, 14);
  184.          this.m_parentControl.addDirtyRect(var2);
  185.          this.m_parentControl.rootView().drawDirtyViews();
  186.       }
  187.    }
  188.  
  189.    public Enumeration children() {
  190.       return this.m_childItems.elements();
  191.    }
  192.  
  193.    public void setHasChildren() {
  194.       if (!this.m_hasChildren) {
  195.          this.m_exploded = false;
  196.          this.m_hasChildren = true;
  197.       }
  198.  
  199.    }
  200.  
  201.    public boolean wasClicked(MouseEvent var1) {
  202.       boolean var2 = false;
  203.       this.m_clickedState = 0;
  204.       if (var1.y >= this.m_yOffset && var1.y <= this.m_yOffset + 16) {
  205.          if (this.m_parent != null) {
  206.             if (this.m_hasChildren && var1.x >= this.m_xOffset && var1.x <= this.m_xOffset + 19) {
  207.                var2 = true;
  208.                this.m_clickedState = 1;
  209.             }
  210.  
  211.             if (!var2) {
  212.                if (var1.x >= this.m_xOffset + 19 && var1.x <= this.m_xOffset + 19 + 21) {
  213.                   var2 = true;
  214.                   this.m_clickedState = 2;
  215.                } else if (var1.x >= this.m_xOffset + 19 + 22 && var1.x <= this.m_xOffset + 19 + 22 + this.m_textWidth) {
  216.                   var2 = true;
  217.                   this.m_clickedState = 3;
  218.                }
  219.             }
  220.          } else if (var1.x >= this.m_xOffset && var1.x <= this.m_xOffset + 21) {
  221.             var2 = true;
  222.             this.m_clickedState = 2;
  223.          } else if (var1.x >= this.m_xOffset + 22 && var1.x <= this.m_xOffset + 22 + this.m_textWidth) {
  224.             var2 = true;
  225.             this.m_clickedState = 3;
  226.          }
  227.       }
  228.  
  229.       return var2;
  230.    }
  231.  
  232.    public String getPath(String var1) {
  233.       String var3 = this.m_internalCaption;
  234.  
  235.       for(CFTreeItem var2 = this.m_parent; var2 != null; var2 = var2.m_parent) {
  236.          if (var2.m_parent != null) {
  237.             var3 = var2.m_internalCaption + var1 + var3;
  238.          }
  239.       }
  240.  
  241.       if (var3.endsWith(":")) {
  242.          var3 = var3 + "\\";
  243.       }
  244.  
  245.       return var3;
  246.    }
  247.  
  248.    public void setDefaultPath(String var1, String var2) {
  249.       CFTreeItem var4 = this;
  250.  
  251.       while(var1.length() > 0) {
  252.          int var5 = var1.indexOf(var2);
  253.          String var3;
  254.          if (var5 == -1) {
  255.             var5 = var1.length() - 1;
  256.             var3 = var1;
  257.          } else {
  258.             var3 = var1.substring(0, var5);
  259.          }
  260.  
  261.          boolean var6 = false;
  262.          Enumeration var7 = var4.children();
  263.  
  264.          while(!var6 && var7.hasMoreElements()) {
  265.             CFTreeItem var8 = (CFTreeItem)var7.nextElement();
  266.             if (var3.equalsIgnoreCase(var8.m_internalCaption)) {
  267.                this.m_parentControl.selectItem(var8);
  268.                if (var5 != var1.length() - 1) {
  269.                   var8.explode();
  270.                }
  271.  
  272.                var6 = true;
  273.                var1 = var1.substring(var5 + 1);
  274.                var4 = var8;
  275.             }
  276.          }
  277.  
  278.          if (!var6) {
  279.             var1 = "";
  280.          }
  281.       }
  282.  
  283.       this.m_parentControl.resetScrollBars();
  284.    }
  285.  
  286.    public void addChild(CFTreeItem var1) {
  287.       this.m_childItems.addElement(var1);
  288.       this.m_hasChildren = true;
  289.    }
  290.  
  291.    public void setURL(String var1, String var2, boolean var3) {
  292.       this.m_URLfromCodeBase = var3;
  293.       this.m_URL = var1;
  294.       this.m_URLDestination = var2;
  295.    }
  296.  
  297.    public void setExtents(FontMetrics var1, int var2, int var3) {
  298.       int var4 = 0;
  299.       int var5 = var1.stringWidth(this.m_caption) + 2;
  300.       if (this.m_parent != null) {
  301.          var4 += (var3 - 1) * 19;
  302.          var4 += 19;
  303.       }
  304.  
  305.       var4 += 22;
  306.       this.m_parentControl.setExtents(var4 + 1 + var5, var2 + 16);
  307.    }
  308.  
  309.    private void init() {
  310.       this.m_childItems = new Vector();
  311.       this.m_imageIndex = 0;
  312.    }
  313.  
  314.    public void explode() {
  315.       Rect var1 = null;
  316.       if (!this.m_hasChildren) {
  317.          this.m_parentControl.doubleClicked(this);
  318.       }
  319.  
  320.       if (this.m_exploded) {
  321.          var1 = this.m_parentControl.extents(this.m_yOffset);
  322.       }
  323.  
  324.       this.m_exploded = !this.m_exploded;
  325.       if (this.m_exploded) {
  326.          if (this.m_hasChildren && this.m_childItems.size() == 0) {
  327.             this.m_parentControl.populateChildren(this);
  328.             if (this.m_childItems.size() == 0) {
  329.                this.m_hasChildren = false;
  330.             }
  331.          }
  332.  
  333.          var1 = this.m_parentControl.extents(this.m_yOffset);
  334.       }
  335.  
  336.       this.m_parentControl.addDirtyRect(var1);
  337.       this.m_parentControl.rootView().drawDirtyViews();
  338.    }
  339. }
  340.