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 / BasicToolBarUI.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-02-26  |  8.8 KB  |  392 lines

  1. package com.sun.java.swing.plaf.basic;
  2.  
  3. import com.sun.java.swing.BoxLayout;
  4. import com.sun.java.swing.JComponent;
  5. import com.sun.java.swing.JFrame;
  6. import com.sun.java.swing.JToolBar;
  7. import com.sun.java.swing.LookAndFeel;
  8. import com.sun.java.swing.UIManager;
  9. import com.sun.java.swing.plaf.ComponentUI;
  10. import com.sun.java.swing.plaf.ToolBarUI;
  11. import com.sun.java.swing.plaf.UIResource;
  12. import java.awt.Color;
  13. import java.awt.Component;
  14. import java.awt.Container;
  15. import java.awt.Dimension;
  16. import java.awt.Frame;
  17. import java.awt.Point;
  18. import java.awt.Window;
  19. import java.awt.event.WindowListener;
  20. import java.beans.PropertyChangeEvent;
  21. import java.io.Serializable;
  22.  
  23. public class BasicToolBarUI extends ToolBarUI implements Serializable {
  24.    protected JToolBar toolBar;
  25.    private boolean floating;
  26.    private boolean floatable;
  27.    private int floatingX;
  28.    private int floatingY;
  29.    private JFrame floatingFrame;
  30.    private DragWindow dragWindow;
  31.    private Container dockingSource;
  32.    private DockingListener dockingListener;
  33.    private int dockingSensitivity;
  34.    protected Color dockingColor;
  35.    protected Color floatingColor;
  36.    protected Color dockingBorderColor;
  37.    protected Color floatingBorderColor;
  38.    public static final int HORIZONTAL = 0;
  39.    public static final int VERTICAL = 1;
  40.  
  41.    public static ComponentUI createUI(JComponent var0) {
  42.       return new BasicToolBarUI();
  43.    }
  44.  
  45.    public void installUI(JComponent var1) {
  46.       this.toolBar = (JToolBar)var1;
  47.       this.installDefaults(var1);
  48.       this.dockingSensitivity = 0;
  49.       this.floating = this.floatable = false;
  50.       this.floatingX = this.floatingY = 0;
  51.       this.floatingFrame = this.createFloatingFrame(this.toolBar);
  52.       this.setOrientation(0);
  53.       this.installListeners(var1);
  54.       var1.setOpaque(true);
  55.    }
  56.  
  57.    public void uninstallUI(JComponent var1) {
  58.       this.uninstallDefaults(var1);
  59.       this.setFloating(false, (Point)null);
  60.       this.floatingFrame = null;
  61.       this.dragWindow = null;
  62.       this.dockingSource = null;
  63.       this.uninstallListeners(var1);
  64.    }
  65.  
  66.    protected void installDefaults(JComponent var1) {
  67.       LookAndFeel.installBorder(var1, "ToolBar.border");
  68.       LookAndFeel.installColorsAndFont(var1, "ToolBar.background", "ToolBar.foreground", "ToolBar.font");
  69.       if (this.dockingColor == null || this.dockingColor instanceof UIResource) {
  70.          this.dockingColor = UIManager.getColor("ToolBar.dockingColor");
  71.       }
  72.  
  73.       if (this.floatingColor == null || this.floatingColor instanceof UIResource) {
  74.          this.floatingColor = UIManager.getColor("ToolBar.floatingColor");
  75.       }
  76.  
  77.       if (this.dockingBorderColor == null || this.dockingBorderColor instanceof UIResource) {
  78.          this.dockingBorderColor = UIManager.getColor("ToolBar.dockingBorderColor");
  79.       }
  80.  
  81.       if (this.floatingBorderColor == null || this.floatingBorderColor instanceof UIResource) {
  82.          this.floatingBorderColor = UIManager.getColor("ToolBar.floatingBorderColor");
  83.       }
  84.  
  85.    }
  86.  
  87.    protected void uninstallDefaults(JComponent var1) {
  88.       LookAndFeel.uninstallBorder(var1);
  89.       this.dockingColor = null;
  90.       this.floatingColor = null;
  91.       this.dockingBorderColor = null;
  92.       this.floatingBorderColor = null;
  93.    }
  94.  
  95.    protected void installListeners(JComponent var1) {
  96.       this.dockingListener = this.createDockingListener((JToolBar)var1);
  97.       this.setFloatable(true);
  98.    }
  99.  
  100.    protected void uninstallListeners(JComponent var1) {
  101.       this.setFloatable(false);
  102.       if (this.dockingListener != null) {
  103.          this.dockingListener = null;
  104.       }
  105.  
  106.    }
  107.  
  108.    protected JFrame createFloatingFrame(JToolBar var1) {
  109.       JFrame var2 = new JFrame(((Component)var1).getName());
  110.       WindowListener var3 = this.createFrameListener();
  111.       ((Window)var2).addWindowListener(var3);
  112.       return var2;
  113.    }
  114.  
  115.    protected DragWindow createDragWindow(JToolBar var1) {
  116.       Object var2 = null;
  117.       if (this.toolBar != null) {
  118.          Container var3;
  119.          for(var3 = this.toolBar.getParent(); var3 != null && !(var3 instanceof Frame); var3 = ((Component)var3).getParent()) {
  120.          }
  121.  
  122.          if (var3 != null && var3 instanceof Frame) {
  123.             var2 = (Frame)var3;
  124.          }
  125.       }
  126.  
  127.       if (var2 == null) {
  128.          this.floatingFrame = this.createFloatingFrame(this.toolBar);
  129.          var2 = this.floatingFrame;
  130.       }
  131.  
  132.       DragWindow var4 = new DragWindow((Frame)var2);
  133.       return var4;
  134.    }
  135.  
  136.    public Dimension getMinimumSize(JComponent var1) {
  137.       return this.getPreferredSize(var1);
  138.    }
  139.  
  140.    public Dimension getPreferredSize(JComponent var1) {
  141.       return null;
  142.    }
  143.  
  144.    public Dimension getMaximumSize(JComponent var1) {
  145.       return this.getPreferredSize(var1);
  146.    }
  147.  
  148.    public void setFloatingLocation(int var1, int var2) {
  149.       this.floatingX = var1;
  150.       this.floatingY = var2;
  151.    }
  152.  
  153.    public boolean isFloating() {
  154.       return this.floating;
  155.    }
  156.  
  157.    public void setFloating(boolean var1, Point var2) {
  158.       if (this.toolBar.isFloatable()) {
  159.          if (this.dragWindow != null) {
  160.             this.dragWindow.setVisible(false);
  161.          }
  162.  
  163.          this.floating = var1;
  164.          if (var1) {
  165.             if (this.dockingSource == null) {
  166.                this.dockingSource = this.toolBar.getParent();
  167.                this.dockingSource.remove(this.toolBar);
  168.             }
  169.  
  170.             if (this.floatingFrame == null) {
  171.                this.floatingFrame = this.createFloatingFrame(this.toolBar);
  172.             }
  173.  
  174.             this.floatingFrame.getContentPane().add(this.toolBar, "Center");
  175.             this.setOrientation(0);
  176.             this.floatingFrame.pack();
  177.             this.floatingFrame.setLocation(this.floatingX, this.floatingY);
  178.             this.floatingFrame.show();
  179.          } else {
  180.             this.floatingFrame.setVisible(false);
  181.             this.floatingFrame.getContentPane().remove(this.toolBar);
  182.             String var3 = this.getDockingConstraint(this.dockingSource, var2);
  183.             int var4 = this.mapConstraintToOrientation(var3);
  184.             this.setOrientation(var4);
  185.             if (this.dockingSource == null) {
  186.                this.dockingSource = this.toolBar.getParent();
  187.             }
  188.  
  189.             this.dockingSource.add(var3, this.toolBar);
  190.          }
  191.  
  192.          this.dockingSource.invalidate();
  193.          Container var5 = this.dockingSource.getParent();
  194.          if (var5 != null) {
  195.             var5.validate();
  196.          }
  197.  
  198.          this.dockingSource.repaint();
  199.       }
  200.  
  201.    }
  202.  
  203.    private int mapConstraintToOrientation(String var1) {
  204.       byte var2 = 0;
  205.       if (var1 != null && (var1.equals("East") || var1.equals("West"))) {
  206.          var2 = 1;
  207.       }
  208.  
  209.       return var2;
  210.    }
  211.  
  212.    public void setOrientation(int var1) {
  213.       if (var1 == 1) {
  214.          this.toolBar.setLayout(new BoxLayout(this.toolBar, 1));
  215.       } else {
  216.          this.toolBar.setLayout(new BoxLayout(this.toolBar, 0));
  217.       }
  218.  
  219.       if (this.dragWindow != null) {
  220.          this.dragWindow.setOrientation(var1);
  221.       }
  222.  
  223.    }
  224.  
  225.    public Color getDockingColor() {
  226.       return this.dockingColor;
  227.    }
  228.  
  229.    public void setDockingColor(Color var1) {
  230.       this.dockingColor = var1;
  231.    }
  232.  
  233.    public Color getFloatingColor() {
  234.       return this.floatingColor;
  235.    }
  236.  
  237.    public void setFloatingColor(Color var1) {
  238.       this.floatingColor = var1;
  239.    }
  240.  
  241.    public void propertyChange(PropertyChangeEvent var1) {
  242.       var1.getPropertyName();
  243.       if (var1.getPropertyName().equals("floatable")) {
  244.          Boolean var2 = (Boolean)var1.getNewValue();
  245.          this.setFloatable(var2);
  246.       }
  247.  
  248.    }
  249.  
  250.    public void setFloatable(boolean var1) {
  251.       if (var1) {
  252.          this.toolBar.addMouseMotionListener(this.dockingListener);
  253.          this.toolBar.addMouseListener(this.dockingListener);
  254.       } else {
  255.          this.toolBar.removeMouseMotionListener(this.dockingListener);
  256.          this.toolBar.removeMouseListener(this.dockingListener);
  257.       }
  258.    }
  259.  
  260.    public boolean canDock(Component var1, Point var2) {
  261.       boolean var3 = false;
  262.       if (var1.contains(var2)) {
  263.          if (this.dockingSensitivity == 0) {
  264.             this.dockingSensitivity = this.toolBar.getSize().height;
  265.          }
  266.  
  267.          if (var2.y < this.dockingSensitivity) {
  268.             var3 = true;
  269.          }
  270.  
  271.          if (var2.y > var1.getSize().height - this.dockingSensitivity) {
  272.             var3 = true;
  273.          }
  274.  
  275.          if (var2.x < this.dockingSensitivity) {
  276.             var3 = true;
  277.          }
  278.  
  279.          if (var2.x > var1.getSize().width - this.dockingSensitivity) {
  280.             var3 = true;
  281.          }
  282.       }
  283.  
  284.       return var3;
  285.    }
  286.  
  287.    private String getDockingConstraint(Component var1, Point var2) {
  288.       String var3 = "North";
  289.       if (var2 != null && var1.contains(var2)) {
  290.          if (this.dockingSensitivity == 0) {
  291.             this.dockingSensitivity = this.toolBar.getSize().height;
  292.          }
  293.  
  294.          if (var2.y > var1.getSize().height - this.dockingSensitivity) {
  295.             var3 = "South";
  296.          }
  297.  
  298.          if (var2.x < this.dockingSensitivity) {
  299.             var3 = "West";
  300.          }
  301.  
  302.          if (var2.x > var1.getSize().width - this.dockingSensitivity) {
  303.             var3 = "East";
  304.          }
  305.  
  306.          if (var2.y < this.dockingSensitivity) {
  307.             var3 = "North";
  308.          }
  309.       }
  310.  
  311.       return var3;
  312.    }
  313.  
  314.    protected void dragTo(Point var1, Point var2) {
  315.       if (this.toolBar.isFloatable()) {
  316.          if (this.dragWindow == null) {
  317.             this.dragWindow = this.createDragWindow(this.toolBar);
  318.          }
  319.  
  320.          Point var3 = this.dragWindow.getOffset();
  321.          if (var3 == null) {
  322.             Dimension var4 = this.toolBar.getPreferredSize();
  323.             var3 = new Point(var4.width / 2, var4.height / 2);
  324.             this.dragWindow.setOffset(var3);
  325.          }
  326.  
  327.          Point var10 = new Point(var2.x + var1.x, var2.y + var1.y);
  328.          Point var5 = new Point(var10.x - var3.x, var10.y - var3.y);
  329.          if (this.dockingSource == null) {
  330.             this.dockingSource = this.toolBar.getParent();
  331.          }
  332.  
  333.          Point var6 = this.dockingSource.getLocationOnScreen();
  334.          Point var7 = new Point(var10.x - var6.x, var10.y - var6.y);
  335.          if (this.canDock(this.dockingSource, var7)) {
  336.             this.dragWindow.setBackground(this.getDockingColor());
  337.             String var8 = this.getDockingConstraint(this.dockingSource, var7);
  338.             int var9 = this.mapConstraintToOrientation(var8);
  339.             this.dragWindow.setOrientation(var9);
  340.             this.dragWindow.setBorderColor(this.dockingBorderColor);
  341.          } else {
  342.             this.dragWindow.setBackground(this.getFloatingColor());
  343.             this.dragWindow.setOrientation(0);
  344.             this.dragWindow.setBorderColor(this.floatingBorderColor);
  345.          }
  346.  
  347.          this.dragWindow.setLocation(var5.x, var5.y);
  348.          if (!this.dragWindow.isVisible()) {
  349.             Dimension var11 = this.toolBar.getPreferredSize();
  350.             this.dragWindow.setSize(var11.width, var11.height);
  351.             this.dragWindow.show();
  352.          }
  353.       }
  354.  
  355.    }
  356.  
  357.    protected void floatAt(Point var1, Point var2) {
  358.       if (this.toolBar.isFloatable()) {
  359.          Point var3 = this.dragWindow.getOffset();
  360.          if (var3 == null) {
  361.             var3 = var1;
  362.             this.dragWindow.setOffset(var1);
  363.          }
  364.  
  365.          Point var4 = new Point(var2.x + var1.x, var2.y + var1.y);
  366.          this.setFloatingLocation(var4.x - var3.x, var4.y - var3.y);
  367.          if (this.dockingSource != null) {
  368.             Point var5 = this.dockingSource.getLocationOnScreen();
  369.             Point var6 = new Point(var4.x - var5.x, var4.y - var5.y);
  370.             if (this.canDock(this.dockingSource, var6)) {
  371.                this.setFloating(false, var6);
  372.             } else {
  373.                this.setFloating(true, (Point)null);
  374.             }
  375.          } else {
  376.             this.setFloating(true, (Point)null);
  377.          }
  378.  
  379.          this.dragWindow.setOffset((Point)null);
  380.       }
  381.  
  382.    }
  383.  
  384.    protected DockingListener createDockingListener(JToolBar var1) {
  385.       return new DockingListener(this, var1);
  386.    }
  387.  
  388.    protected WindowListener createFrameListener() {
  389.       return new FrameListener(this);
  390.    }
  391. }
  392.