home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 March / pcp161a.iso / handson / files / copyjava.exe / com / sun / java / swing / plaf / basic / BasicScrollBarUI.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-02-26  |  10.1 KB  |  427 lines

  1. package com.sun.java.swing.plaf.basic;
  2.  
  3. import com.sun.java.swing.JButton;
  4. import com.sun.java.swing.JComponent;
  5. import com.sun.java.swing.JScrollBar;
  6. import com.sun.java.swing.LookAndFeel;
  7. import com.sun.java.swing.SwingConstants;
  8. import com.sun.java.swing.Timer;
  9. import com.sun.java.swing.UIManager;
  10. import com.sun.java.swing.plaf.ComponentUI;
  11. import com.sun.java.swing.plaf.ScrollBarUI;
  12. import java.awt.Color;
  13. import java.awt.Component;
  14. import java.awt.Container;
  15. import java.awt.Dimension;
  16. import java.awt.Graphics;
  17. import java.awt.Insets;
  18. import java.awt.LayoutManager;
  19. import java.awt.Rectangle;
  20. import java.io.Serializable;
  21.  
  22. public class BasicScrollBarUI extends ScrollBarUI implements LayoutManager, Serializable, SwingConstants {
  23.    private static final Dimension minimumThumbSize = new Dimension(8, 8);
  24.    private static final Dimension maximumThumbSize = new Dimension(4096, 4096);
  25.    private static Color thumbHighlightColor;
  26.    private static Color thumbLightShadowColor;
  27.    private static Color thumbDarkShadowColor;
  28.    private static Color thumbColor;
  29.    private static Color trackColor;
  30.    private static Color trackHighlightColor;
  31.    private static boolean scrollBarColorsInitialized;
  32.    protected JScrollBar scrollbar;
  33.    protected JButton incrButton;
  34.    protected JButton decrButton;
  35.    protected boolean isDragging;
  36.    protected TrackListener trackListener;
  37.    protected ArrowButtonListener buttonListener;
  38.    protected ModelListener modelListener;
  39.    private Rectangle thumbRect;
  40.    private Rectangle trackRect;
  41.    protected int trackHighlight;
  42.    protected static final int NO_HIGHLIGHT = 0;
  43.    protected static final int DECREASE_HIGHLIGHT = 1;
  44.    protected static final int INCREASE_HIGHLIGHT = 2;
  45.    protected ScrollListener scrollListener;
  46.    protected Timer scrollTimer;
  47.  
  48.    public static ComponentUI createUI(JComponent var0) {
  49.       return new BasicScrollBarUI();
  50.    }
  51.  
  52.    protected void configureScrollBarColors() {
  53.       if (!scrollBarColorsInitialized) {
  54.          thumbHighlightColor = UIManager.getColor("ScrollBar.thumbHighlight");
  55.          thumbLightShadowColor = UIManager.getColor("ScrollBar.thumbLightShadow");
  56.          thumbDarkShadowColor = UIManager.getColor("ScrollBar.thumbDarkShadow");
  57.          thumbColor = UIManager.getColor("ScrollBar.thumb");
  58.          trackColor = UIManager.getColor("ScrollBar.track");
  59.          trackHighlightColor = UIManager.getColor("ScrollBar.trackHighlight");
  60.          scrollBarColorsInitialized = true;
  61.       }
  62.  
  63.    }
  64.  
  65.    public void installUI(JComponent var1) {
  66.       this.scrollbar = (JScrollBar)var1;
  67.       this.thumbRect = new Rectangle(0, 0, 0, 0);
  68.       this.trackRect = new Rectangle(0, 0, 0, 0);
  69.       this.trackHighlight = 0;
  70.       switch (((JScrollBar)var1).getOrientation()) {
  71.          case 0:
  72.             this.incrButton = this.createIncreaseButton(3);
  73.             this.decrButton = this.createDecreaseButton(7);
  74.             break;
  75.          case 1:
  76.             this.incrButton = this.createIncreaseButton(5);
  77.             this.decrButton = this.createDecreaseButton(1);
  78.       }
  79.  
  80.       this.scrollbar.setLayout(this);
  81.       this.scrollbar.add(this.incrButton);
  82.       this.scrollbar.add(this.decrButton);
  83.       this.trackListener = new TrackListener(this);
  84.       this.buttonListener = new ArrowButtonListener(this);
  85.       this.modelListener = new ModelListener(this);
  86.       this.scrollbar.addMouseListener(this.trackListener);
  87.       this.scrollbar.addMouseMotionListener(this.trackListener);
  88.       this.scrollbar.getModel().addChangeListener(this.modelListener);
  89.       if (this.incrButton != null) {
  90.          this.incrButton.addMouseListener(this.buttonListener);
  91.       }
  92.  
  93.       if (this.decrButton != null) {
  94.          this.decrButton.addMouseListener(this.buttonListener);
  95.       }
  96.  
  97.       this.scrollbar.setEnabled(this.scrollbar.isEnabled());
  98.       this.scrollbar.setOpaque(true);
  99.       this.scrollListener = new ScrollListener(this);
  100.       this.scrollTimer = new Timer(100, this.scrollListener);
  101.       this.scrollTimer.setInitialDelay(300);
  102.       LookAndFeel.installBorder(this.scrollbar, "ScrollBar.border");
  103.       this.configureScrollBarColors();
  104.    }
  105.  
  106.    public void uninstallUI(JComponent var1) {
  107.       this.scrollTimer.stop();
  108.       this.scrollTimer = null;
  109.       if (this.decrButton != null) {
  110.          this.decrButton.removeMouseListener(this.buttonListener);
  111.       }
  112.  
  113.       if (this.incrButton != null) {
  114.          this.incrButton.removeMouseListener(this.buttonListener);
  115.       }
  116.  
  117.       this.scrollbar.getModel().removeChangeListener(this.modelListener);
  118.       this.scrollbar.removeMouseListener(this.trackListener);
  119.       this.scrollbar.removeMouseMotionListener(this.trackListener);
  120.       this.scrollbar.remove(this.incrButton);
  121.       this.scrollbar.remove(this.decrButton);
  122.       this.scrollbar.setLayout((LayoutManager)null);
  123.       this.thumbRect = null;
  124.       this.incrButton = null;
  125.       this.decrButton = null;
  126.       this.scrollbar = null;
  127.    }
  128.  
  129.    protected void paintBackground(Graphics var1, JComponent var2) {
  130.       var1.setColor(((Component)var2).getBackground());
  131.       var1.fillRect(0, 0, var2.getWidth(), var2.getHeight());
  132.    }
  133.  
  134.    public void paint(Graphics var1, JComponent var2) {
  135.       this.paintBackground(var1, var2);
  136.       this.paintTrack(var1, var2, this.getTrackBounds());
  137.       this.paintThumb(var1, var2, this.getThumbBounds());
  138.    }
  139.  
  140.    public Dimension getPreferredSize(JComponent var1) {
  141.       return this.scrollbar.getOrientation() == 1 ? new Dimension(16, 48) : new Dimension(48, 16);
  142.    }
  143.  
  144.    public Dimension getMinimumSize(JComponent var1) {
  145.       return this.getPreferredSize(var1);
  146.    }
  147.  
  148.    public Dimension getMaximumSize(JComponent var1) {
  149.       return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
  150.    }
  151.  
  152.    protected JButton createDecreaseButton(int var1) {
  153.       return new BasicArrowButton(var1);
  154.    }
  155.  
  156.    protected JButton createIncreaseButton(int var1) {
  157.       return new BasicArrowButton(var1);
  158.    }
  159.  
  160.    protected void paintDecreaseHighlight(Graphics var1) {
  161.       Insets var2 = this.scrollbar.getInsets();
  162.       Rectangle var3 = this.getThumbBounds();
  163.       var1.setColor(trackHighlightColor);
  164.       if (this.scrollbar.getOrientation() == 1) {
  165.          int var8 = var2.left;
  166.          int var9 = this.decrButton.getY() + this.decrButton.getHeight();
  167.          int var10 = this.scrollbar.getWidth() - (var2.left + var2.right);
  168.          int var11 = var3.y - var9;
  169.          var1.fillRect(var8, var9, var10, var11);
  170.       } else {
  171.          int var4 = this.decrButton.getX() + this.decrButton.getHeight();
  172.          int var5 = var2.top;
  173.          int var6 = var3.x - var4;
  174.          int var7 = this.scrollbar.getHeight() - (var2.top + var2.bottom);
  175.          var1.fillRect(var4, var5, var6, var7);
  176.       }
  177.    }
  178.  
  179.    protected void paintIncreaseHighlight(Graphics var1) {
  180.       Insets var2 = this.scrollbar.getInsets();
  181.       Rectangle var3 = this.getThumbBounds();
  182.       var1.setColor(trackHighlightColor);
  183.       if (this.scrollbar.getOrientation() == 1) {
  184.          int var8 = var2.left;
  185.          int var9 = var3.y + var3.height;
  186.          int var10 = this.scrollbar.getWidth() - (var2.left + var2.right);
  187.          int var11 = this.incrButton.getY() - var9;
  188.          var1.fillRect(var8, var9, var10, var11);
  189.       } else {
  190.          int var4 = var3.x + var3.width;
  191.          int var5 = var2.top;
  192.          int var6 = this.incrButton.getX() - var4;
  193.          int var7 = this.scrollbar.getHeight() - (var2.top + var2.bottom);
  194.          var1.fillRect(var4, var5, var6, var7);
  195.       }
  196.    }
  197.  
  198.    protected void paintTrack(Graphics var1, JComponent var2, Rectangle var3) {
  199.       var1.setColor(trackColor);
  200.       var1.fillRect(var3.x, var3.y, var3.width, var3.height);
  201.       if (this.trackHighlight == 1) {
  202.          this.paintDecreaseHighlight(var1);
  203.       } else {
  204.          if (this.trackHighlight == 2) {
  205.             this.paintIncreaseHighlight(var1);
  206.          }
  207.  
  208.       }
  209.    }
  210.  
  211.    protected void paintThumb(Graphics var1, JComponent var2, Rectangle var3) {
  212.       if (!var3.isEmpty() && this.scrollbar.isEnabled()) {
  213.          int var4 = var3.width;
  214.          int var5 = var3.height;
  215.          var1.translate(var3.x, var3.y);
  216.          var1.setColor(thumbDarkShadowColor);
  217.          var1.drawRect(0, 0, var4 - 1, var5 - 1);
  218.          var1.setColor(thumbColor);
  219.          var1.fillRect(0, 0, var4 - 1, var5 - 1);
  220.          var1.setColor(thumbHighlightColor);
  221.          var1.drawLine(1, 1, 1, var5 - 2);
  222.          var1.drawLine(2, 1, var4 - 3, 1);
  223.          var1.setColor(thumbLightShadowColor);
  224.          var1.drawLine(2, var5 - 2, var4 - 2, var5 - 2);
  225.          var1.drawLine(var4 - 2, 1, var4 - 2, var5 - 3);
  226.          var1.translate(-var3.x, -var3.y);
  227.       }
  228.    }
  229.  
  230.    protected Dimension getMinimumThumbSize() {
  231.       return minimumThumbSize;
  232.    }
  233.  
  234.    protected Dimension getMaximumThumbSize() {
  235.       return maximumThumbSize;
  236.    }
  237.  
  238.    public void addLayoutComponent(String var1, Component var2) {
  239.    }
  240.  
  241.    public void removeLayoutComponent(Component var1) {
  242.    }
  243.  
  244.    public Dimension preferredLayoutSize(Container var1) {
  245.       return this.getPreferredSize((JComponent)var1);
  246.    }
  247.  
  248.    public Dimension minimumLayoutSize(Container var1) {
  249.       return this.getMinimumSize((JComponent)var1);
  250.    }
  251.  
  252.    protected void layoutVScrollbar(JScrollBar var1) {
  253.       Dimension var2 = ((Component)var1).getSize();
  254.       Insets var3 = ((JComponent)var1).getInsets();
  255.       int var4 = var2.width - (var3.left + var3.right);
  256.       int var5 = var3.left;
  257.       int var6 = this.decrButton.getPreferredSize().height;
  258.       int var7 = var3.top;
  259.       int var8 = this.incrButton.getPreferredSize().height;
  260.       int var9 = var2.height - (var3.bottom + var8);
  261.       int var10 = var3.top + var3.bottom;
  262.       int var11 = var6 + var8;
  263.       float var12 = (float)(var2.height - (var10 + var11));
  264.       float var13 = (float)var1.getMinimum();
  265.       float var14 = (float)var1.getVisibleAmount();
  266.       float var15 = (float)var1.getValue();
  267.       float var16 = (float)var1.getMaximum() - var13;
  268.       int var17 = (int)(var12 * (var14 / var16));
  269.       var17 = Math.max(var17, this.getMinimumThumbSize().height);
  270.       var17 = Math.min(var17, this.getMaximumThumbSize().height);
  271.       int var18 = var9 - var17;
  272.       if (var1.getValue() < var1.getMaximum() - var1.getVisibleAmount()) {
  273.          float var19 = var12 - (float)var17;
  274.          var18 = (int)(0.5F + var19 * ((var15 - var13) / (var16 - var14)));
  275.          var18 += var7 + var6;
  276.       }
  277.  
  278.       int var25 = var2.height - var10;
  279.       if (var25 < var11) {
  280.          var8 = var6 = var25 / 2;
  281.          var9 = var2.height - (var3.bottom + var8);
  282.       }
  283.  
  284.       this.decrButton.setBounds(var5, var7, var4, var6);
  285.       this.incrButton.setBounds(var5, var9, var4, var8);
  286.       int var20 = var7 + var6;
  287.       int var21 = var9 - var20;
  288.       this.trackRect.setBounds(var5, var20, var4, var21);
  289.       if (var17 >= (int)var12) {
  290.          this.setThumbBounds(0, 0, 0, 0);
  291.       } else {
  292.          if (var18 + var17 > var9) {
  293.             var18 = var9 - var17;
  294.          }
  295.  
  296.          if (var18 < var7 + var6) {
  297.             var18 = var7 + var6 + 1;
  298.          }
  299.  
  300.          this.setThumbBounds(var5, var18, var4, var17);
  301.       }
  302.    }
  303.  
  304.    protected void layoutHScrollbar(JScrollBar var1) {
  305.       Dimension var2 = ((Component)var1).getSize();
  306.       Insets var3 = ((JComponent)var1).getInsets();
  307.       int var4 = var2.height - (var3.top + var3.bottom);
  308.       int var5 = var3.top;
  309.       int var6 = this.decrButton.getPreferredSize().width;
  310.       int var7 = var3.left;
  311.       int var8 = this.incrButton.getPreferredSize().width;
  312.       int var9 = var2.width - (var3.right + var8);
  313.       int var10 = var3.left + var3.right;
  314.       int var11 = var6 + var8;
  315.       float var12 = (float)(var2.width - (var10 + var11));
  316.       float var13 = (float)var1.getMinimum();
  317.       float var14 = (float)var1.getVisibleAmount();
  318.       float var15 = (float)var1.getMaximum() - var13;
  319.       float var16 = (float)var1.getValue();
  320.       int var17 = (int)(var12 * (var14 / var15));
  321.       var17 = Math.max(var17, this.getMinimumThumbSize().width);
  322.       var17 = Math.min(var17, this.getMaximumThumbSize().width);
  323.       int var18 = var9 - var17;
  324.       if (var1.getValue() < var1.getMaximum() - var1.getVisibleAmount()) {
  325.          float var19 = var12 - (float)var17;
  326.          var18 = (int)(0.5F + var19 * ((var16 - var13) / (var15 - var14)));
  327.          var18 += var7 + var6;
  328.       }
  329.  
  330.       int var25 = var2.width - var10;
  331.       if (var25 < var11) {
  332.          var8 = var6 = var25 / 2;
  333.          var9 = var2.width - (var3.right + var8);
  334.       }
  335.  
  336.       this.decrButton.setBounds(var7, var5, var6, var4);
  337.       this.incrButton.setBounds(var9, var5, var8, var4);
  338.       int var20 = var7 + var6;
  339.       int var21 = var9 - var20;
  340.       this.trackRect.setBounds(var20, var5, var21, var4);
  341.       if (var17 >= (int)var12) {
  342.          this.setThumbBounds(0, 0, 0, 0);
  343.       } else {
  344.          if (var18 + var17 > var9) {
  345.             var18 = var9 - var17;
  346.          }
  347.  
  348.          if (var18 < var7 + var6) {
  349.             var18 = var7 + var6 + 1;
  350.          }
  351.  
  352.          this.setThumbBounds(var18, var5, var17, var4);
  353.       }
  354.    }
  355.  
  356.    public void layoutContainer(Container var1) {
  357.       if (!this.isDragging) {
  358.          JScrollBar var2 = (JScrollBar)var1;
  359.          switch (var2.getOrientation()) {
  360.             case 0:
  361.                this.layoutHScrollbar(var2);
  362.                return;
  363.             case 1:
  364.                this.layoutVScrollbar(var2);
  365.                return;
  366.             default:
  367.          }
  368.       }
  369.    }
  370.  
  371.    protected void setThumbBounds(int var1, int var2, int var3, int var4) {
  372.       if (this.thumbRect.x != var1 || this.thumbRect.y != var2 || this.thumbRect.width != var3 || this.thumbRect.height != var4) {
  373.          int var5 = Math.min(var1, this.thumbRect.x);
  374.          int var6 = Math.min(var2, this.thumbRect.y);
  375.          int var7 = Math.max(var1 + var3, this.thumbRect.x + this.thumbRect.width);
  376.          int var8 = Math.max(var2 + var4, this.thumbRect.y + this.thumbRect.height);
  377.          this.thumbRect.setBounds(var1, var2, var3, var4);
  378.          this.scrollbar.repaint(var5, var6, var7 - var5, var8 - var6);
  379.       }
  380.    }
  381.  
  382.    protected Rectangle getThumbBounds() {
  383.       return this.thumbRect;
  384.    }
  385.  
  386.    protected Rectangle getTrackBounds() {
  387.       return this.trackRect;
  388.    }
  389.  
  390.    protected void scrollByBlock(int var1) {
  391.       JScrollBar var2 = this.scrollbar;
  392.       synchronized(var2){}
  393.  
  394.       try {
  395.          int var4 = this.scrollbar.getValue();
  396.          int var5 = this.scrollbar.getBlockIncrement(var1);
  397.          int var6 = var5 * (var1 > 0 ? 1 : -1);
  398.          this.scrollbar.setValue(var4 + var6);
  399.          this.trackHighlight = var1 > 0 ? 2 : 1;
  400.          Rectangle var7 = this.getTrackBounds();
  401.          this.scrollbar.repaint(var7.x, var7.y, var7.width, var7.height);
  402.       } catch (Throwable var9) {
  403.          throw var9;
  404.       }
  405.  
  406.    }
  407.  
  408.    protected void scrollByUnit(int var1) {
  409.       JScrollBar var2 = this.scrollbar;
  410.       synchronized(var2){}
  411.  
  412.       try {
  413.          int var4;
  414.          if (var1 > 0) {
  415.             var4 = this.scrollbar.getUnitIncrement(var1);
  416.          } else {
  417.             var4 = -this.scrollbar.getUnitIncrement(var1);
  418.          }
  419.  
  420.          this.scrollbar.setValue(var4 + this.scrollbar.getValue());
  421.       } catch (Throwable var6) {
  422.          throw var6;
  423.       }
  424.  
  425.    }
  426. }
  427.