home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &… the Search for Life CD 3 / 0_CD-ROM.iso / install / jre1_3 / lib / rt.jar / javax / swing / plaf / basic / BasicTabbedPaneUI$TabbedPaneLayout.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  6.8 KB  |  465 lines

  1. package javax.swing.plaf.basic;
  2.  
  3. import java.awt.Component;
  4. import java.awt.Container;
  5. import java.awt.Dimension;
  6. import java.awt.FontMetrics;
  7. import java.awt.Insets;
  8. import java.awt.LayoutManager;
  9. import java.awt.Rectangle;
  10. import javax.swing.SwingUtilities;
  11.  
  12. public class BasicTabbedPaneUI$TabbedPaneLayout implements LayoutManager {
  13.    // $FF: synthetic field
  14.    private final BasicTabbedPaneUI this$0;
  15.  
  16.    public BasicTabbedPaneUI$TabbedPaneLayout(BasicTabbedPaneUI var1) {
  17.       this.this$0 = var1;
  18.    }
  19.  
  20.    public void addLayoutComponent(String var1, Component var2) {
  21.    }
  22.  
  23.    public void removeLayoutComponent(Component var1) {
  24.    }
  25.  
  26.    public Dimension preferredLayoutSize(Container var1) {
  27.       return this.calculateSize(false);
  28.    }
  29.  
  30.    public Dimension minimumLayoutSize(Container var1) {
  31.       return this.calculateSize(true);
  32.    }
  33.  
  34.    protected Dimension calculateSize(boolean var1) {
  35.       int var2 = this.this$0.tabPane.getTabPlacement();
  36.       Insets var3 = this.this$0.tabPane.getInsets();
  37.       Insets var4 = this.this$0.getContentBorderInsets(var2);
  38.       Dimension var5 = new Dimension(0, 0);
  39.       int var6 = var4.top + var4.bottom;
  40.       int var7 = var4.left + var4.right;
  41.       int var8 = 0;
  42.       int var9 = 0;
  43.  
  44.       for(int var10 = 0; var10 < this.this$0.tabPane.getTabCount(); ++var10) {
  45.          Component var11 = this.this$0.tabPane.getComponentAt(var10);
  46.          Dimension var12 = var1 ? var11.getMinimumSize() : var11.getPreferredSize();
  47.          if (var12 != null) {
  48.             var9 = Math.max(var12.height, var9);
  49.             var8 = Math.max(var12.width, var8);
  50.          }
  51.       }
  52.  
  53.       var7 += var8;
  54.       var6 += var9;
  55.       int var15 = 0;
  56.       switch (var2) {
  57.          case 1:
  58.          case 3:
  59.          default:
  60.             var15 = this.preferredTabAreaHeight(var2, var7);
  61.             var6 += var15;
  62.             break;
  63.          case 2:
  64.          case 4:
  65.             var15 = this.preferredTabAreaWidth(var2, var6);
  66.             var7 += var15;
  67.       }
  68.  
  69.       return new Dimension(var7 + var3.left + var3.right, var6 + var3.bottom + var3.top);
  70.    }
  71.  
  72.    protected int preferredTabAreaHeight(int var1, int var2) {
  73.       FontMetrics var3 = this.this$0.getFontMetrics();
  74.       int var4 = this.this$0.tabPane.getTabCount();
  75.       int var5 = 0;
  76.       if (var4 > 0) {
  77.          int var6 = 1;
  78.          int var7 = 0;
  79.          int var8 = this.this$0.calculateMaxTabHeight(var1);
  80.  
  81.          for(int var9 = 0; var9 < var4; ++var9) {
  82.             int var10 = this.this$0.calculateTabWidth(var1, var9, var3);
  83.             if (var7 != 0 && var7 + var10 > var2) {
  84.                ++var6;
  85.                var7 = 0;
  86.             }
  87.  
  88.             var7 += var10;
  89.          }
  90.  
  91.          var5 = this.this$0.calculateTabAreaHeight(var1, var6, var8);
  92.       }
  93.  
  94.       return var5;
  95.    }
  96.  
  97.    protected int preferredTabAreaWidth(int var1, int var2) {
  98.       FontMetrics var3 = this.this$0.getFontMetrics();
  99.       int var4 = this.this$0.tabPane.getTabCount();
  100.       int var5 = 0;
  101.       if (var4 > 0) {
  102.          int var6 = 1;
  103.          int var7 = 0;
  104.          int var8 = var3.getHeight();
  105.          this.this$0.maxTabWidth = this.this$0.calculateMaxTabWidth(var1);
  106.  
  107.          for(int var9 = 0; var9 < var4; ++var9) {
  108.             int var10 = this.this$0.calculateTabHeight(var1, var9, var8);
  109.             if (var7 != 0 && var7 + var10 > var2) {
  110.                ++var6;
  111.                var7 = 0;
  112.             }
  113.  
  114.             var7 += var10;
  115.          }
  116.  
  117.          var5 = this.this$0.calculateTabAreaWidth(var1, var6, this.this$0.maxTabWidth);
  118.       }
  119.  
  120.       return var5;
  121.    }
  122.  
  123.    public void layoutContainer(Container var1) {
  124.       int var2 = this.this$0.tabPane.getTabPlacement();
  125.       Insets var3 = this.this$0.tabPane.getInsets();
  126.       int var4 = this.this$0.tabPane.getSelectedIndex();
  127.       Component var5 = this.this$0.getVisibleComponent();
  128.       this.calculateLayoutInfo();
  129.       if (var4 < 0) {
  130.          if (var5 != null) {
  131.             this.this$0.setVisibleComponent((Component)null);
  132.          }
  133.       } else {
  134.          int var10 = 0;
  135.          int var11 = 0;
  136.          Insets var12 = this.this$0.getContentBorderInsets(var2);
  137.          Component var13 = this.this$0.tabPane.getComponentAt(var4);
  138.          boolean var14 = false;
  139.          if (var13 != null && var13 != var5) {
  140.             if (var5 != null && SwingUtilities.findFocusOwner(var5) != null) {
  141.                var14 = true;
  142.             }
  143.  
  144.             this.this$0.setVisibleComponent(var13);
  145.          }
  146.  
  147.          Rectangle var15 = this.this$0.tabPane.getBounds();
  148.          int var16 = this.this$0.tabPane.getComponentCount();
  149.          if (var16 > 0) {
  150.             int var6;
  151.             int var7;
  152.             switch (var2) {
  153.                case 1:
  154.                default:
  155.                   var11 = this.this$0.calculateTabAreaHeight(var2, this.this$0.runCount, this.this$0.maxTabHeight);
  156.                   var6 = var3.left + var12.left;
  157.                   var7 = var3.top + var11 + var12.top;
  158.                   break;
  159.                case 2:
  160.                   var10 = this.this$0.calculateTabAreaWidth(var2, this.this$0.runCount, this.this$0.maxTabWidth);
  161.                   var6 = var3.left + var10 + var12.left;
  162.                   var7 = var3.top + var12.top;
  163.                   break;
  164.                case 3:
  165.                   var11 = this.this$0.calculateTabAreaHeight(var2, this.this$0.runCount, this.this$0.maxTabHeight);
  166.                   var6 = var3.left + var12.left;
  167.                   var7 = var3.top + var12.top;
  168.                   break;
  169.                case 4:
  170.                   var10 = this.this$0.calculateTabAreaWidth(var2, this.this$0.runCount, this.this$0.maxTabWidth);
  171.                   var6 = var3.left + var12.left;
  172.                   var7 = var3.top + var12.top;
  173.             }
  174.  
  175.             int var8 = var15.width - var10 - var3.left - var3.right - var12.left - var12.right;
  176.             int var9 = var15.height - var11 - var3.top - var3.bottom - var12.top - var12.bottom;
  177.  
  178.             for(int var17 = 0; var17 < var16; ++var17) {
  179.                Component var18 = this.this$0.tabPane.getComponent(var17);
  180.                var18.setBounds(var6, var7, var8, var9);
  181.             }
  182.          }
  183.  
  184.          if (var14 && !this.this$0.requestFocusForVisibleComponent()) {
  185.             this.this$0.tabPane.requestFocus();
  186.          }
  187.       }
  188.  
  189.    }
  190.  
  191.    public void calculateLayoutInfo() {
  192.       int var1 = this.this$0.tabPane.getTabCount();
  193.       this.this$0.assureRectsCreated(var1);
  194.       this.calculateTabRects(this.this$0.tabPane.getTabPlacement(), var1);
  195.    }
  196.  
  197.    protected void calculateTabRects(int var1, int var2) {
  198.       FontMetrics var3 = this.this$0.getFontMetrics();
  199.       Dimension var4 = this.this$0.tabPane.getSize();
  200.       Insets var5 = this.this$0.tabPane.getInsets();
  201.       Insets var6 = this.this$0.getTabAreaInsets(var1);
  202.       int var7 = var3.getHeight();
  203.       int var8 = this.this$0.tabPane.getSelectedIndex();
  204.       boolean var15 = var1 == 2 || var1 == 4;
  205.       boolean var16 = BasicGraphicsUtils.isLeftToRight(this.this$0.tabPane);
  206.       int var12;
  207.       int var13;
  208.       int var14;
  209.       switch (var1) {
  210.          case 1:
  211.          default:
  212.             this.this$0.maxTabHeight = this.this$0.calculateMaxTabHeight(var1);
  213.             var12 = var5.left + var6.left;
  214.             var13 = var5.top + var6.top;
  215.             var14 = var4.width - (var5.right + var6.right);
  216.             break;
  217.          case 2:
  218.             this.this$0.maxTabWidth = this.this$0.calculateMaxTabWidth(var1);
  219.             var12 = var5.left + var6.left;
  220.             var13 = var5.top + var6.top;
  221.             var14 = var4.height - (var5.bottom + var6.bottom);
  222.             break;
  223.          case 3:
  224.             this.this$0.maxTabHeight = this.this$0.calculateMaxTabHeight(var1);
  225.             var12 = var5.left + var6.left;
  226.             var13 = var4.height - var5.bottom - var6.bottom - this.this$0.maxTabHeight;
  227.             var14 = var4.width - (var5.right + var6.right);
  228.             break;
  229.          case 4:
  230.             this.this$0.maxTabWidth = this.this$0.calculateMaxTabWidth(var1);
  231.             var12 = var4.width - var5.right - var6.right - this.this$0.maxTabWidth;
  232.             var13 = var5.top + var6.top;
  233.             var14 = var4.height - (var5.bottom + var6.bottom);
  234.       }
  235.  
  236.       int var9 = this.this$0.getTabRunOverlay(var1);
  237.       this.this$0.runCount = 0;
  238.       this.this$0.selectedRun = -1;
  239.       if (var2 != 0) {
  240.          for(int var10 = 0; var10 < var2; ++var10) {
  241.             Rectangle var17 = this.this$0.rects[var10];
  242.             if (!var15) {
  243.                if (var10 > 0) {
  244.                   var17.x = this.this$0.rects[var10 - 1].x + this.this$0.rects[var10 - 1].width;
  245.                } else {
  246.                   this.this$0.tabRuns[0] = 0;
  247.                   this.this$0.runCount = 1;
  248.                   this.this$0.maxTabWidth = 0;
  249.                   var17.x = var12;
  250.                }
  251.  
  252.                var17.width = this.this$0.calculateTabWidth(var1, var10, var3);
  253.                this.this$0.maxTabWidth = Math.max(this.this$0.maxTabWidth, var17.width);
  254.                if (var17.x != 2 + var5.left && var17.x + var17.width > var14) {
  255.                   if (this.this$0.runCount > this.this$0.tabRuns.length - 1) {
  256.                      this.this$0.expandTabRunsArray();
  257.                   }
  258.  
  259.                   this.this$0.tabRuns[this.this$0.runCount] = var10;
  260.                   ++this.this$0.runCount;
  261.                   var17.x = var12;
  262.                }
  263.  
  264.                var17.y = var13;
  265.                var17.height = this.this$0.maxTabHeight;
  266.             } else {
  267.                if (var10 > 0) {
  268.                   var17.y = this.this$0.rects[var10 - 1].y + this.this$0.rects[var10 - 1].height;
  269.                } else {
  270.                   this.this$0.tabRuns[0] = 0;
  271.                   this.this$0.runCount = 1;
  272.                   this.this$0.maxTabHeight = 0;
  273.                   var17.y = var13;
  274.                }
  275.  
  276.                var17.height = this.this$0.calculateTabHeight(var1, var10, var7);
  277.                this.this$0.maxTabHeight = Math.max(this.this$0.maxTabHeight, var17.height);
  278.                if (var17.y != 2 + var5.top && var17.y + var17.height > var14) {
  279.                   if (this.this$0.runCount > this.this$0.tabRuns.length - 1) {
  280.                      this.this$0.expandTabRunsArray();
  281.                   }
  282.  
  283.                   this.this$0.tabRuns[this.this$0.runCount] = var10;
  284.                   ++this.this$0.runCount;
  285.                   var17.y = var13;
  286.                }
  287.  
  288.                var17.x = var12;
  289.                var17.width = this.this$0.maxTabWidth;
  290.             }
  291.  
  292.             if (var10 == var8) {
  293.                this.this$0.selectedRun = this.this$0.runCount - 1;
  294.             }
  295.          }
  296.  
  297.          if (this.this$0.runCount > 1) {
  298.             this.normalizeTabRuns(var1, var2, var15 ? var13 : var12, var14);
  299.             this.this$0.selectedRun = this.this$0.getRunForTab(var2, var8);
  300.             if (this.this$0.shouldRotateTabRuns(var1)) {
  301.                this.rotateTabRuns(var1, this.this$0.selectedRun);
  302.             }
  303.          }
  304.  
  305.          for(int var21 = this.this$0.runCount - 1; var21 >= 0; --var21) {
  306.             int var18 = this.this$0.tabRuns[var21];
  307.             int var19 = this.this$0.tabRuns[var21 == this.this$0.runCount - 1 ? 0 : var21 + 1];
  308.             int var20 = var19 != 0 ? var19 - 1 : var2 - 1;
  309.             if (!var15) {
  310.                for(int var11 = var18; var11 <= var20; ++var11) {
  311.                   Rectangle var24 = this.this$0.rects[var11];
  312.                   var24.y = var13;
  313.                   var24.x += this.this$0.getTabRunIndent(var1, var21);
  314.                }
  315.  
  316.                if (this.this$0.shouldPadTabRun(var1, var21)) {
  317.                   this.padTabRun(var1, var18, var20, var14);
  318.                }
  319.  
  320.                if (var1 == 3) {
  321.                   var13 -= this.this$0.maxTabHeight - var9;
  322.                } else {
  323.                   var13 += this.this$0.maxTabHeight - var9;
  324.                }
  325.             } else {
  326.                for(int var23 = var18; var23 <= var20; ++var23) {
  327.                   Rectangle var25 = this.this$0.rects[var23];
  328.                   var25.x = var12;
  329.                   var25.y += this.this$0.getTabRunIndent(var1, var21);
  330.                }
  331.  
  332.                if (this.this$0.shouldPadTabRun(var1, var21)) {
  333.                   this.padTabRun(var1, var18, var20, var14);
  334.                }
  335.  
  336.                if (var1 == 4) {
  337.                   var12 -= this.this$0.maxTabWidth - var9;
  338.                } else {
  339.                   var12 += this.this$0.maxTabWidth - var9;
  340.                }
  341.             }
  342.          }
  343.  
  344.          this.padSelectedTab(var1, var8);
  345.          if (!var16 && !var15) {
  346.             int var26 = var4.width - (var5.right + var6.right);
  347.  
  348.             for(int var22 = 0; var22 < var2; ++var22) {
  349.                this.this$0.rects[var22].x = var26 - this.this$0.rects[var22].x - this.this$0.rects[var22].width;
  350.             }
  351.          }
  352.  
  353.       }
  354.    }
  355.  
  356.    protected void rotateTabRuns(int var1, int var2) {
  357.       for(int var3 = 0; var3 < var2; ++var3) {
  358.          int var4 = this.this$0.tabRuns[0];
  359.  
  360.          for(int var5 = 1; var5 < this.this$0.runCount; ++var5) {
  361.             this.this$0.tabRuns[var5 - 1] = this.this$0.tabRuns[var5];
  362.          }
  363.  
  364.          this.this$0.tabRuns[this.this$0.runCount - 1] = var4;
  365.       }
  366.  
  367.    }
  368.  
  369.    protected void normalizeTabRuns(int var1, int var2, int var3, int var4) {
  370.       boolean var5 = var1 == 2 || var1 == 4;
  371.       int var6 = this.this$0.runCount - 1;
  372.       boolean var7 = true;
  373.       double var8 = (double)1.25F;
  374.  
  375.       while(var7) {
  376.          int var10 = this.this$0.lastTabInRun(var2, var6);
  377.          int var11 = this.this$0.lastTabInRun(var2, var6 - 1);
  378.          int var12;
  379.          int var13;
  380.          if (!var5) {
  381.             var12 = this.this$0.rects[var10].x + this.this$0.rects[var10].width;
  382.             var13 = (int)((double)this.this$0.maxTabWidth * var8);
  383.          } else {
  384.             var12 = this.this$0.rects[var10].y + this.this$0.rects[var10].height;
  385.             var13 = (int)((double)this.this$0.maxTabHeight * var8 * (double)2.0F);
  386.          }
  387.  
  388.          if (var4 - var12 > var13) {
  389.             this.this$0.tabRuns[var6] = var11;
  390.             if (!var5) {
  391.                this.this$0.rects[var11].x = var3;
  392.             } else {
  393.                this.this$0.rects[var11].y = var3;
  394.             }
  395.  
  396.             for(int var14 = var11 + 1; var14 <= var10; ++var14) {
  397.                if (!var5) {
  398.                   this.this$0.rects[var14].x = this.this$0.rects[var14 - 1].x + this.this$0.rects[var14 - 1].width;
  399.                } else {
  400.                   this.this$0.rects[var14].y = this.this$0.rects[var14 - 1].y + this.this$0.rects[var14 - 1].height;
  401.                }
  402.             }
  403.          } else if (var6 == this.this$0.runCount - 1) {
  404.             var7 = false;
  405.          }
  406.  
  407.          if (var6 - 1 > 0) {
  408.             --var6;
  409.          } else {
  410.             var6 = this.this$0.runCount - 1;
  411.             var8 += (double)0.25F;
  412.          }
  413.       }
  414.  
  415.    }
  416.  
  417.    protected void padTabRun(int var1, int var2, int var3, int var4) {
  418.       Rectangle var5 = this.this$0.rects[var3];
  419.       if (var1 != 1 && var1 != 3) {
  420.          int var11 = var5.y + var5.height - this.this$0.rects[var2].y;
  421.          int var12 = var4 - (var5.y + var5.height);
  422.          float var13 = (float)var12 / (float)var11;
  423.  
  424.          for(int var14 = var2; var14 <= var3; ++var14) {
  425.             Rectangle var15 = this.this$0.rects[var14];
  426.             if (var14 > var2) {
  427.                var15.y = this.this$0.rects[var14 - 1].y + this.this$0.rects[var14 - 1].height;
  428.             }
  429.  
  430.             var15.height += Math.round((float)var15.height * var13);
  431.          }
  432.  
  433.          var5.height = var4 - var5.y;
  434.       } else {
  435.          int var6 = var5.x + var5.width - this.this$0.rects[var2].x;
  436.          int var7 = var4 - (var5.x + var5.width);
  437.          float var8 = (float)var7 / (float)var6;
  438.  
  439.          for(int var9 = var2; var9 <= var3; ++var9) {
  440.             Rectangle var10 = this.this$0.rects[var9];
  441.             if (var9 > var2) {
  442.                var10.x = this.this$0.rects[var9 - 1].x + this.this$0.rects[var9 - 1].width;
  443.             }
  444.  
  445.             var10.width += Math.round((float)var10.width * var8);
  446.          }
  447.  
  448.          var5.width = var4 - var5.x;
  449.       }
  450.  
  451.    }
  452.  
  453.    protected void padSelectedTab(int var1, int var2) {
  454.       if (var2 >= 0) {
  455.          Rectangle var3 = this.this$0.rects[var2];
  456.          Insets var4 = this.this$0.getSelectedTabPadInsets(var1);
  457.          var3.x -= var4.left;
  458.          var3.width += var4.left + var4.right;
  459.          var3.y -= var4.top;
  460.          var3.height += var4.top + var4.bottom;
  461.       }
  462.  
  463.    }
  464. }
  465.