home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 14 / IOPROG_14.ISO / soft / sdkjava / sdkjava.exe / SDKJava.cab / AFC102 / Samples / Viewers / Src / ColumnViewerPanel.java next >
Encoding:
Java Source  |  1998-03-05  |  3.7 KB  |  147 lines

  1. //
  2. // (c) 1997 Microsoft Corporation.  All rights reserved.
  3. //
  4. import java.awt.Event;
  5. import java.awt.Insets;
  6. import com.ms.ui.*;
  7. import com.ms.fx.*;
  8.  
  9. public class ColumnViewerPanel extends UIPanel implements SDKConsts
  10. {
  11.     private static final int INDENT = 30;
  12.  
  13.     public UITree root;
  14.     private int idx[] = { 0, 0, 0 };
  15.     private GeoNode rtnode;
  16.  
  17.     public ColumnViewerPanel()
  18.     {
  19.         int widths[] = { 200, 140, 140 };
  20.         setLayout(new UIBorderLayout(10,10));
  21.  
  22.         //
  23.         // Create headings
  24.         //
  25.         String headings[] = { "Name", "Start", "End" };
  26.  
  27.         //
  28.         // Create root node of UITree
  29.         //
  30.         rtnode = new GeoNode(idx, -1);
  31.  
  32.         //
  33.         // Create UITree
  34.         //
  35.         root = buildTree(rtnode, 0);
  36.         root.setExpanded(true);
  37.  
  38.         //
  39.         // Create UIColumnViewer
  40.         //
  41.         UIColumnViewer cvtree = new UIColumnViewer(headings, root);
  42.         // Set column widths
  43.         cvtree.setWidths(widths);
  44.  
  45.         // Add to this panel
  46.         add(cvtree, "center");
  47.     }
  48.  
  49.     // *************************************************************************
  50.     // buildTree - recursive method for building tree
  51.     // *************************************************************************
  52.     private UITree buildTree(GeoNode header, int depth)
  53.     {
  54.         UITree tree = null, subtree;
  55.         GeoNode subnode;
  56.         Object elements[] = new Object[3];
  57.         int i;
  58.  
  59.         try {
  60.             while ( true ) {
  61.                 // trigger AOOBE
  62.                 switch ( depth ) {
  63.                 case 0: i = GeoERA.IMAGE[idx[0]]; break;
  64.                 case 1: i = GeoPERIOD.IMAGE[idx[0]][idx[1]]; break;
  65.                 case 2: i = GeoEPOCH.IMAGE[idx[0]][idx[1]][idx[2]]; break;
  66.                 case 3: return null;
  67.                 }
  68.                 // If we get to here there is a subnode to header
  69.                 if ( idx[depth] == 0 ) {
  70.                     elements[0] = header;
  71.                     elements[1] = header.start;
  72.                     elements[2] = header.end;
  73.                     //
  74.                     // Create tree with UIRow as header
  75.                     //
  76.                     tree = new UITree(new UIRow(elements), INDENT);
  77.                 }
  78.  
  79.                 subnode = new GeoNode(idx, depth);
  80.                 subtree = buildTree(subnode, depth+1);
  81.                 if ( subtree == null ) {
  82.                     elements[0] = subnode;
  83.                     elements[1] = subnode.start;
  84.                     elements[2] = subnode.end;
  85.                     // 
  86.                     // add UIRow branch to tree
  87.                     //
  88.                     tree.add(new UIRow(elements));
  89.                 }
  90.                 else
  91.                     tree.add(subtree);
  92.                 idx[depth]++;
  93.             }
  94.         }
  95.         catch ( ArrayIndexOutOfBoundsException e ) {
  96.             if ( idx[depth] != 0 ) { // Were there any nodes at this level?
  97.                 idx[depth] = 0; // Yes. Reset counter at this depth
  98.                 return tree;
  99.             }
  100.             else
  101.                 return null;
  102.         }
  103.     }
  104. }
  105.  
  106. class GeoNode extends UIItem implements SDKConsts
  107. {
  108.     public String start;
  109.     public String end;
  110.  
  111.     public GeoNode(int idx[], int depth)
  112.     {
  113.         switch ( depth ) {
  114.         case -1:
  115.             setImage(SDKImages.get(GeoROOT.IMAGE));
  116.             setName(GeoROOT.NAME);
  117.             setForeground(BaseColor.getColor(new FxColor(0,0,255)));
  118.             start = GeoROOT.START;
  119.             end = GeoROOT.END;
  120.             break;
  121.         case 0:
  122.             setImage(SDKImages.get(GeoERA.IMAGE[idx[0]]));
  123.             setName(GeoERA.NAME[idx[0]]);
  124.             setForeground(BaseColor.getColor(new FxColor(255,0,0)));
  125.             start = GeoERA.START[idx[0]];
  126.             end = GeoERA.END[idx[0]];
  127.             break;
  128.         case 1:
  129.             setImage(SDKImages.get(GeoPERIOD.IMAGE[idx[0]][idx[1]]));
  130.             setName(GeoPERIOD.NAME[idx[0]][idx[1]]);
  131.             setForeground(BaseColor.getColor(new FxColor(0,191,0)));
  132.             start = GeoPERIOD.START[idx[0]][idx[1]];
  133.             end = GeoPERIOD.END[idx[0]][idx[1]];
  134.             break;
  135.         case 2:
  136.             setImage(SDKImages.get(GeoEPOCH.IMAGE[idx[0]][idx[1]][idx[2]]));
  137.             setName(GeoEPOCH.NAME[idx[0]][idx[1]][idx[2]]);
  138.             setForeground(BaseColor.getColor(new FxColor(255,255,0)));
  139.             start = GeoEPOCH.START[idx[0]][idx[1]][idx[2]];
  140.             end = GeoEPOCH.END[idx[0]][idx[1]][idx[2]];
  141.             break;
  142.         }
  143.         setFlags(UIItem.LEFT);
  144.         setFont(new FxFont("Helvetica", FxFont.PLAIN, 14));
  145.     }
  146. }
  147.