home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 144 / DPCS0200.iso / Internet / Supanet / system / swing.jar / javax / swing / plaf / basic / BasicScrollBarUI.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-11-05  |  11.4 KB  |  477 lines

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