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