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

  1. package allaire.controls;
  2.  
  3. import java.applet.Applet;
  4. import java.net.MalformedURLException;
  5. import java.net.URL;
  6. import netscape.application.AWTCompatibility;
  7. import netscape.application.Application;
  8. import netscape.application.BezelBorder;
  9. import netscape.application.Bitmap;
  10. import netscape.application.Color;
  11. import netscape.application.EmptyBorder;
  12. import netscape.application.Font;
  13. import netscape.application.FontMetrics;
  14. import netscape.application.Graphics;
  15. import netscape.application.MouseEvent;
  16. import netscape.application.Rect;
  17. import netscape.application.ScrollGroup;
  18. import netscape.application.ScrollView;
  19. import netscape.application.Target;
  20. import netscape.application.View;
  21. import netscape.util.Enumeration;
  22. import netscape.util.Hashtable;
  23. import netscape.util.Vector;
  24.  
  25. public class CFTree extends View implements Target {
  26.    public static final String COMMAND_ITEM_WAS_SELECTED = "ItemWasSelected";
  27.    private boolean m_firstDraw = true;
  28.    public boolean m_showURLs = true;
  29.    public boolean m_appendKeys = true;
  30.    private Hashtable m_bitmapHash;
  31.    private int m_xExtent;
  32.    private int m_yExtent;
  33.    private int m_yIncrement;
  34.    private Vector m_bitmaps;
  35.    private Font m_font;
  36.    protected CFTreeItem m_selectedItem;
  37.    protected CFTreeItem m_rootItem;
  38.    protected Vector m_allItems;
  39.    public ScrollGroup m_scrollGroup;
  40.    public Target m_Target;
  41.    public static final int folderImage = 0;
  42.    public static final int computerImage = 2;
  43.    public static final int floppyImage = 4;
  44.    public static final int fixedImage = 6;
  45.    public static final int remoteImage = 8;
  46.    public static final int cdImage = 10;
  47.    public static final int documentImage = 12;
  48.    public static final int elementsImage = 14;
  49.  
  50.    public int extentsRecurse(FontMetrics var1, CFTreeItem var2, int var3, int var4) {
  51.       boolean var5;
  52.       if (var2 != this.m_rootItem) {
  53.          var2.setExtents(var1, var3, var4);
  54.          var3 += this.m_yIncrement;
  55.          var5 = var2.m_exploded;
  56.       } else {
  57.          var5 = true;
  58.       }
  59.  
  60.       CFTreeItem var6;
  61.       if (var5) {
  62.          for(Enumeration var7 = var2.children(); var7.hasMoreElements(); var3 = this.extentsRecurse(var1, var6, var3, var4 + 1)) {
  63.             var6 = (CFTreeItem)var7.nextElement();
  64.          }
  65.       }
  66.  
  67.       return var3;
  68.    }
  69.  
  70.    public void setBorder(boolean var1) {
  71.       if (var1) {
  72.          this.m_scrollGroup.setBorder(new BezelBorder(1, Color.lightGray));
  73.       } else {
  74.          this.m_scrollGroup.setBorder(new EmptyBorder());
  75.       }
  76.    }
  77.  
  78.    public void setItemURL(int var1, String var2, String var3, boolean var4) {
  79.       CFTreeItem var5 = this.itemAt(var1);
  80.       if (var5 != null) {
  81.          var5.setURL(var2, var3, var4);
  82.       }
  83.  
  84.    }
  85.  
  86.    public int yExtent() {
  87.       return this.m_yExtent;
  88.    }
  89.  
  90.    public void performCommand(String var1, Object var2) {
  91.       if (var1.equalsIgnoreCase("RESET_SCROLLBARS")) {
  92.          this.resetScrollBars();
  93.       }
  94.  
  95.    }
  96.  
  97.    public void itemSelected(CFTreeItem var1) {
  98.       if (this.m_Target != null) {
  99.          this.m_Target.performCommand("ItemWasSelected", var1);
  100.       }
  101.  
  102.    }
  103.  
  104.    public Rect extents(int var1) {
  105.       Font var2 = this.m_font == null ? Font.defaultFont() : this.m_font;
  106.       FontMetrics var3 = var2.fontMetrics();
  107.       this.extentsRecurse(var3, this.m_rootItem, 0, -1);
  108.       Rect var4 = new Rect(0, var1, this.m_xExtent, this.m_yExtent - var1);
  109.       return var4;
  110.    }
  111.  
  112.    public void setExtents(int var1, int var2) {
  113.       if (var1 > this.m_xExtent) {
  114.          this.m_xExtent = var1;
  115.       }
  116.  
  117.       if (var2 > this.m_yExtent) {
  118.          this.m_yExtent = var2;
  119.       }
  120.  
  121.    }
  122.  
  123.    public void setItemImageURL(int var1, String var2, String var3) {
  124.       Object var4 = null;
  125.       Object var5 = null;
  126.       boolean var6 = true;
  127.       boolean var7 = true;
  128.       CFTreeItem var8 = this.itemAt(var1);
  129.       if (var8 != null) {
  130.          if (var2.length() > 0) {
  131.             Applet var9 = AWTCompatibility.awtApplet();
  132.             URL var10 = var9.getDocumentBase();
  133.             Bitmap var14 = (Bitmap)this.m_bitmapHash.get(var2);
  134.             if (var14 == null) {
  135.                try {
  136.                   URL var11;
  137.                   if (var2.toLowerCase().startsWith("http://")) {
  138.                      var11 = new URL(var2);
  139.                   } else {
  140.                      var11 = new URL(var10, var2);
  141.                   }
  142.  
  143.                   var14 = Bitmap.bitmapFromURL(var11);
  144.                   var6 = false;
  145.                } catch (MalformedURLException var13) {
  146.                   System.out.println("CFTree: Malformed URL on default image");
  147.                }
  148.             }
  149.  
  150.             Bitmap var15;
  151.             if (var3.length() > 0) {
  152.                if (var3.compareTo(var2) != 0) {
  153.                   var15 = (Bitmap)this.m_bitmapHash.get(var3);
  154.                   if (var15 == null) {
  155.                      try {
  156.                         URL var16;
  157.                         if (var3.toLowerCase().startsWith("http://")) {
  158.                            var16 = new URL(var3);
  159.                         } else {
  160.                            var16 = new URL(var10, var3);
  161.                         }
  162.  
  163.                         var15 = Bitmap.bitmapFromURL(var16);
  164.                         var7 = false;
  165.                      } catch (MalformedURLException var12) {
  166.                         System.out.println("CFTree: Malformed URL on open image");
  167.                      }
  168.                   }
  169.                } else {
  170.                   var15 = var14;
  171.                }
  172.             } else {
  173.                var15 = var14;
  174.             }
  175.  
  176.             if (var14 != null && var15 != null) {
  177.                var8.m_imageIndex = this.m_bitmaps.size();
  178.                this.m_bitmaps.addElement(var14);
  179.                this.m_bitmaps.addElement(var15);
  180.                if (!var6) {
  181.                   this.m_bitmapHash.put(var2, var14);
  182.                }
  183.  
  184.                if (!var7) {
  185.                   this.m_bitmapHash.put(var3, var15);
  186.                }
  187.             }
  188.  
  189.          }
  190.       }
  191.    }
  192.  
  193.    public String currentItem() {
  194.       String var1 = "";
  195.       if (this.m_selectedItem != null) {
  196.          var1 = this.m_selectedItem.m_internalCaption;
  197.       }
  198.  
  199.       return var1;
  200.    }
  201.  
  202.    public CFTreeItem getItemForCaption(String var1) {
  203.       for(int var3 = 0; var3 < this.m_allItems.count(); ++var3) {
  204.          CFTreeItem var2 = (CFTreeItem)this.m_allItems.elementAt(var3);
  205.          if (var2.m_caption.equalsIgnoreCase(var1)) {
  206.             System.out.println("Found Item : " + var2.m_caption);
  207.             return var2;
  208.          }
  209.       }
  210.  
  211.       return null;
  212.    }
  213.  
  214.    public void setTarget(Target var1) {
  215.       this.m_Target = var1;
  216.    }
  217.  
  218.    public CFTree(View var1) {
  219.       this.init(0, 0);
  220.       var1.addSubview(this.m_scrollGroup);
  221.    }
  222.  
  223.    public CFTree(int var1, int var2, int var3, int var4, View var5) {
  224.       super(0, 0, var3, var4);
  225.       this.init(var1, var2);
  226.       var5.addSubview(this.m_scrollGroup);
  227.    }
  228.  
  229.    public void doubleClicked(CFTreeItem var1) {
  230.    }
  231.  
  232.    public int drawItem(Graphics var1, FontMetrics var2, CFTreeItem var3, int var4, int var5, Vector var6, Rect var7) {
  233.       boolean var8;
  234.       if (var3 != this.m_rootItem) {
  235.          if (var4 >= var7.y - this.m_yIncrement) {
  236.             boolean var11 = var4 > var7.y + var7.height + this.m_yIncrement;
  237.             var3.draw(var1, var2, var4, var5, var6, var11);
  238.          }
  239.  
  240.          var4 += this.m_yIncrement;
  241.          var8 = var3.m_exploded;
  242.       } else {
  243.          var8 = true;
  244.       }
  245.  
  246.       CFTreeItem var9;
  247.       if (var8) {
  248.          for(Enumeration var10 = var3.children(); var10.hasMoreElements(); var4 = this.drawItem(var1, var2, var9, var4, var5 + 1, var6, var7)) {
  249.             var9 = (CFTreeItem)var10.nextElement();
  250.          }
  251.       }
  252.  
  253.       return var4;
  254.    }
  255.  
  256.    public CFTreeItem itemAt(int var1) {
  257.       CFTreeItem var2;
  258.       if (var1 < this.m_allItems.size()) {
  259.          var2 = (CFTreeItem)this.m_allItems.elementAt(var1);
  260.       } else {
  261.          var2 = null;
  262.       }
  263.  
  264.       return var2;
  265.    }
  266.  
  267.    public void selectItem(CFTreeItem var1) {
  268.       if (this.m_selectedItem != var1) {
  269.          if (this.m_selectedItem != null) {
  270.             this.m_selectedItem.select(false);
  271.          }
  272.  
  273.          var1.select(true);
  274.          if (var1.m_selected) {
  275.             this.m_selectedItem = var1;
  276.             this.itemSelected(var1);
  277.          }
  278.  
  279.       }
  280.    }
  281.  
  282.    public int xExtent() {
  283.       return this.m_xExtent;
  284.    }
  285.  
  286.    public void setHScroll(boolean var1) {
  287.       this.m_scrollGroup.setHasHorizScrollBar(var1);
  288.    }
  289.  
  290.    public void setVScroll(boolean var1) {
  291.       this.m_scrollGroup.setHasVertScrollBar(var1);
  292.    }
  293.  
  294.    private CFTreeItem hitTest(CFTreeItem var1, MouseEvent var2) {
  295.       Object var4 = null;
  296.       CFTreeItem var5 = null;
  297.       boolean var3;
  298.       if (var1 != this.m_rootItem) {
  299.          if (var1.wasClicked(var2)) {
  300.             return var1;
  301.          }
  302.  
  303.          var3 = var1.m_exploded;
  304.       } else {
  305.          var3 = true;
  306.       }
  307.  
  308.       CFTreeItem var7;
  309.       if (var3 && var5 == null) {
  310.          for(Enumeration var6 = var1.children(); var6.hasMoreElements() && var5 == null; var5 = this.hitTest(var7, var2)) {
  311.             var7 = (CFTreeItem)var6.nextElement();
  312.          }
  313.       }
  314.  
  315.       return var5;
  316.    }
  317.  
  318.    public void setFont(Font var1) {
  319.       this.m_font = var1;
  320.    }
  321.  
  322.    public int addItem(String var1, int var2) {
  323.       return this.addItem(var1, var1, var2);
  324.    }
  325.  
  326.    public int addItem(String var1, String var2, int var3) {
  327.       CFTreeItem var5;
  328.       if (var3 >= 0) {
  329.          var5 = this.itemAt(var3);
  330.       } else {
  331.          var5 = null;
  332.       }
  333.  
  334.       CFTreeItem var4 = new CFTreeItem(this, var1, var2);
  335.       if (var5 == null) {
  336.          this.m_rootItem.addChild(var4);
  337.       } else {
  338.          var5.addChild(var4);
  339.          var4.setParent(var5);
  340.       }
  341.  
  342.       int var6 = this.m_allItems.size();
  343.       this.m_allItems.addElement(var4);
  344.       return var6;
  345.    }
  346.  
  347.    public int addItem(String var1, int var2, int var3) {
  348.       int var5 = this.addItem(var1, var1, var2);
  349.       CFTreeItem var4 = this.itemAt(var5);
  350.       if (var3 >= 0 && var3 < this.m_bitmaps.size()) {
  351.          var4.m_imageIndex = var3;
  352.       }
  353.  
  354.       return var5;
  355.    }
  356.  
  357.    public int addItem(String var1, String var2, int var3, int var4) {
  358.       int var6 = this.addItem(var1, var2, var3);
  359.       CFTreeItem var5 = this.itemAt(var6);
  360.       if (var4 >= 0 && var4 < this.m_bitmaps.size()) {
  361.          var5.m_imageIndex = var4;
  362.       }
  363.  
  364.       return var6;
  365.    }
  366.  
  367.    public String currentPath(String var1) {
  368.       String var2 = "";
  369.       if (this.m_selectedItem != null) {
  370.          var2 = this.m_selectedItem.getPath(var1);
  371.       }
  372.  
  373.       return var2;
  374.    }
  375.  
  376.    public void drawView(Graphics var1) {
  377.       Font var4 = this.m_font == null ? Font.defaultFont() : this.m_font;
  378.       FontMetrics var5 = var4.fontMetrics();
  379.       var1.setFont(var4);
  380.       Rect var6 = var1.clipRect();
  381.       var1.setColor(Color.white);
  382.       var1.fillRect(var6);
  383.       var1.setColor(Color.black);
  384.       Vector var7 = new Vector();
  385.       this.m_xExtent = 0;
  386.       this.m_yExtent = 0;
  387.       this.drawItem(var1, var5, this.m_rootItem, 0, -1, var7, var6);
  388.       Enumeration var3 = var7.elements();
  389.  
  390.       while(var3.hasMoreElements()) {
  391.          CFTreeItem var2 = (CFTreeItem)var3.nextElement();
  392.          var2.drawHotBox(var1, var5);
  393.       }
  394.  
  395.       if (this.m_firstDraw) {
  396.          this.m_firstDraw = false;
  397.          Application.application().performCommandLater(this, "RESET_SCROLLBARS", (Object)null);
  398.       }
  399.  
  400.    }
  401.  
  402.    public void resetScrollBars() {
  403.       if (this.m_scrollGroup.hasHorizScrollBar() || this.m_scrollGroup.hasVertScrollBar()) {
  404.          Rect var1 = this.extents(0);
  405.          int var2 = Math.max(this.m_scrollGroup.width(), var1.width);
  406.          int var3 = Math.max(this.m_scrollGroup.height(), var1.height);
  407.          Rect var4 = ((View)this).bounds();
  408.          ((View)this).setBounds(var4.x, var4.y, var2, var3);
  409.       }
  410.  
  411.    }
  412.  
  413.    public void showURLs(boolean var1) {
  414.       this.m_showURLs = var1;
  415.    }
  416.  
  417.    public boolean mouseDown(MouseEvent var1) {
  418.       CFTreeItem var2 = this.hitTest(this.m_rootItem, var1);
  419.       if (var2 == null) {
  420.          return true;
  421.       } else {
  422.          if (var1.clickCount() > 1) {
  423.             switch (var2.clickedState()) {
  424.                case 2:
  425.                case 3:
  426.                   this.selectItem(var2);
  427.                default:
  428.                   var2.explode();
  429.                   this.resetScrollBars();
  430.             }
  431.          } else {
  432.             switch (var2.clickedState()) {
  433.                case 1:
  434.                   var2.explode();
  435.                   this.resetScrollBars();
  436.                   break;
  437.                case 2:
  438.                case 3:
  439.                   this.selectItem(var2);
  440.             }
  441.          }
  442.  
  443.          return true;
  444.       }
  445.    }
  446.  
  447.    public void selectItemWithCaption(String var1) {
  448.       CFTreeItem var2 = this.getItemForCaption(var1);
  449.       if (var2 != null) {
  450.          System.out.println("Selecting Item : " + var2.toString());
  451.          this.selectItem(var2);
  452.       }
  453.  
  454.    }
  455.  
  456.    public Bitmap bitmap(int var1) {
  457.       Bitmap var2 = (Bitmap)this.m_bitmaps.elementAt(var1);
  458.       return var2;
  459.    }
  460.  
  461.    public void appendKeys(boolean var1) {
  462.       this.m_appendKeys = var1;
  463.    }
  464.  
  465.    public void hideChildren(CFTreeItem var1) {
  466.       if (var1.m_exploded) {
  467.          var1.m_exploded = false;
  468.          Enumeration var3 = var1.children();
  469.  
  470.          while(var3.hasMoreElements()) {
  471.             CFTreeItem var2 = (CFTreeItem)var3.nextElement();
  472.             this.hideChildren(var2);
  473.          }
  474.       }
  475.  
  476.    }
  477.  
  478.    private void init(int var1, int var2) {
  479.       this.m_scrollGroup = new ScrollGroup(var1, var2, ((View)this).width(), ((View)this).height());
  480.       this.m_scrollGroup.setContentView(this);
  481.       this.m_scrollGroup.setBackgroundColor(Color.white);
  482.       this.m_allItems = new Vector();
  483.       this.m_bitmapHash = new Hashtable();
  484.       this.m_rootItem = new CFTreeItem(this, "");
  485.       this.m_scrollGroup.setBorder(new EmptyBorder());
  486.       this.m_yIncrement = 16;
  487.       Application var3 = Application.application();
  488.       this.m_bitmaps = new Vector();
  489.       this.m_bitmaps.addElement(Bitmap.bitmapNamed("FolderClosed.gif"));
  490.       this.m_bitmaps.addElement(Bitmap.bitmapNamed("FolderOpen.gif"));
  491.       this.m_bitmaps.addElement(Bitmap.bitmapNamed("Computer.gif", false));
  492.       this.m_bitmaps.addElement(this.m_bitmaps.lastElement());
  493.       this.m_bitmaps.addElement(Bitmap.bitmapNamed("Floppy.gif", false));
  494.       this.m_bitmaps.addElement(this.m_bitmaps.lastElement());
  495.       this.m_bitmaps.addElement(Bitmap.bitmapNamed("HardDrive.gif", false));
  496.       this.m_bitmaps.addElement(this.m_bitmaps.lastElement());
  497.       this.m_bitmaps.addElement(Bitmap.bitmapNamed("NetworkDrive.gif", false));
  498.       this.m_bitmaps.addElement(this.m_bitmaps.lastElement());
  499.       this.m_bitmaps.addElement(Bitmap.bitmapNamed("CDDrive.gif", false));
  500.       this.m_bitmaps.addElement(this.m_bitmaps.lastElement());
  501.       this.m_bitmaps.addElement(Bitmap.bitmapNamed("Document.gif", false));
  502.       this.m_bitmaps.addElement(this.m_bitmaps.lastElement());
  503.       this.m_bitmaps.addElement(Bitmap.bitmapNamed("Elements.gif", false));
  504.       this.m_bitmaps.addElement(this.m_bitmaps.lastElement());
  505.       ScrollView var4 = this.m_scrollGroup.scrollView();
  506.       this.m_font = null;
  507.       Font.defaultFont();
  508.       ((View)var4).setBuffered(true);
  509.    }
  510.  
  511.    public void populateChildren(CFTreeItem var1) {
  512.    }
  513.  
  514.    public String currentCompletePath(String var1) {
  515.       String var2 = "";
  516.       if (this.m_selectedItem != null) {
  517.          var2 = this.m_selectedItem.getCompletePath(var1);
  518.       }
  519.  
  520.       return var2;
  521.    }
  522. }
  523.