home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / javax / swing / DefaultDesktopManager.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  7.7 KB  |  533 lines

  1. package javax.swing;
  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.Point;
  9. import java.awt.Rectangle;
  10. import java.beans.PropertyVetoException;
  11. import java.io.Serializable;
  12.  
  13. public class DefaultDesktopManager implements DesktopManager, Serializable {
  14.    static final String HAS_BEEN_ICONIFIED_PROPERTY = "wasIconOnce";
  15.    static final int DEFAULT_DRAG_MODE = 0;
  16.    static final int OUTLINE_DRAG_MODE = 1;
  17.    static final int FASTER_DRAG_MODE = 2;
  18.    int dragMode = 0;
  19.    private transient Rectangle currentBounds = null;
  20.    private transient Graphics desktopGraphics = null;
  21.    private transient Rectangle desktopBounds = null;
  22.    private transient Rectangle[] floatingItems = new Rectangle[0];
  23.    private transient Point currentLoc = null;
  24.  
  25.    public void openFrame(JInternalFrame var1) {
  26.       if (var1.getDesktopIcon().getParent() != null) {
  27.          var1.getDesktopIcon().getParent().add(var1);
  28.          this.removeIconFor(var1);
  29.       }
  30.  
  31.    }
  32.  
  33.    public void closeFrame(JInternalFrame var1) {
  34.       boolean var2 = var1.isSelected();
  35.       Container var3 = ((Component)var1).getParent();
  36.       if (var2) {
  37.          try {
  38.             var1.setSelected(false);
  39.          } catch (PropertyVetoException var5) {
  40.          }
  41.       }
  42.  
  43.       if (var3 != null) {
  44.          var3.remove(var1);
  45.          ((Component)var3).repaint(((JComponent)var1).getX(), ((JComponent)var1).getY(), ((JComponent)var1).getWidth(), ((JComponent)var1).getHeight());
  46.       }
  47.  
  48.       this.removeIconFor(var1);
  49.       if (var1.getNormalBounds() != null) {
  50.          var1.setNormalBounds((Rectangle)null);
  51.       }
  52.  
  53.       if (this.wasIcon(var1)) {
  54.          this.setWasIcon(var1, (Boolean)null);
  55.       }
  56.  
  57.       if (var2) {
  58.          this.activateNextFrame(var3);
  59.       }
  60.  
  61.    }
  62.  
  63.    public void maximizeFrame(JInternalFrame var1) {
  64.       Rectangle var2;
  65.       if (!var1.isIcon()) {
  66.          var2 = ((Component)var1).getParent().getBounds();
  67.       } else {
  68.          Container var3 = var1.getDesktopIcon().getParent();
  69.          if (var3 == null) {
  70.             return;
  71.          }
  72.  
  73.          var2 = ((Component)var3).getBounds();
  74.  
  75.          try {
  76.             var1.setIcon(false);
  77.          } catch (PropertyVetoException var6) {
  78.          }
  79.       }
  80.  
  81.       var1.setNormalBounds(((Component)var1).getBounds());
  82.       this.setBoundsForFrame(var1, 0, 0, var2.width, var2.height);
  83.  
  84.       try {
  85.          var1.setSelected(true);
  86.       } catch (PropertyVetoException var5) {
  87.       }
  88.  
  89.       this.removeIconFor(var1);
  90.    }
  91.  
  92.    public void minimizeFrame(JInternalFrame var1) {
  93.       if (var1.getNormalBounds() != null) {
  94.          Rectangle var2 = var1.getNormalBounds();
  95.          var1.setNormalBounds((Rectangle)null);
  96.  
  97.          try {
  98.             var1.setSelected(true);
  99.          } catch (PropertyVetoException var4) {
  100.          }
  101.  
  102.          this.setBoundsForFrame(var1, var2.x, var2.y, var2.width, var2.height);
  103.       }
  104.  
  105.       this.removeIconFor(var1);
  106.    }
  107.  
  108.    public void iconifyFrame(JInternalFrame var1) {
  109.       JDesktopPane var4 = var1.getDesktopPane();
  110.       boolean var5 = var1.isSelected();
  111.       JInternalFrame.JDesktopIcon var2 = var1.getDesktopIcon();
  112.       if (!this.wasIcon(var1)) {
  113.          Rectangle var6 = this.getBoundsForIconOf(var1);
  114.          ((Component)var2).setBounds(var6.x, var6.y, var6.width, var6.height);
  115.          this.setWasIcon(var1, Boolean.TRUE);
  116.       }
  117.  
  118.       Container var3 = ((Component)var1).getParent();
  119.       if (var3 != null) {
  120.          if (var3 instanceof JLayeredPane) {
  121.             JLayeredPane var10 = (JLayeredPane)var3;
  122.             int var7 = JLayeredPane.getLayer(var1);
  123.             JLayeredPane.putLayer(var2, var7);
  124.          }
  125.  
  126.          if (var1.isMaximum()) {
  127.             try {
  128.                var1.setMaximum(false);
  129.             } catch (PropertyVetoException var9) {
  130.             }
  131.          }
  132.  
  133.          var3.remove(var1);
  134.          var3.add(var2);
  135.          ((Component)var3).repaint(((JComponent)var1).getX(), ((JComponent)var1).getY(), ((JComponent)var1).getWidth(), ((JComponent)var1).getHeight());
  136.  
  137.          try {
  138.             var1.setSelected(false);
  139.          } catch (PropertyVetoException var8) {
  140.          }
  141.  
  142.          if (var5) {
  143.             this.activateNextFrame(var3);
  144.          }
  145.  
  146.       }
  147.    }
  148.  
  149.    void activateNextFrame(Container var1) {
  150.       JInternalFrame var3 = null;
  151.       if (var1 != null) {
  152.          for(int var2 = 0; var2 < var1.getComponentCount(); ++var2) {
  153.             if (var1.getComponent(var2) instanceof JInternalFrame) {
  154.                var3 = (JInternalFrame)var1.getComponent(var2);
  155.                break;
  156.             }
  157.          }
  158.  
  159.          if (var3 != null) {
  160.             try {
  161.                var3.setSelected(true);
  162.             } catch (PropertyVetoException var5) {
  163.             }
  164.  
  165.             var3.moveToFront();
  166.          }
  167.  
  168.       }
  169.    }
  170.  
  171.    public void deiconifyFrame(JInternalFrame var1) {
  172.       JInternalFrame.JDesktopIcon var2 = var1.getDesktopIcon();
  173.       if (((Component)var2).getParent() != null) {
  174.          ((Component)var2).getParent().add(var1);
  175.          this.removeIconFor(var1);
  176.  
  177.          try {
  178.             var1.setSelected(true);
  179.          } catch (PropertyVetoException var4) {
  180.          }
  181.       }
  182.  
  183.    }
  184.  
  185.    public void activateFrame(JInternalFrame var1) {
  186.       Container var2 = ((Component)var1).getParent();
  187.       JDesktopPane var4 = var1.getDesktopPane();
  188.       JInternalFrame var5 = var4 == null ? null : var4.getSelectedFrame();
  189.       if (var2 == null) {
  190.          var2 = var1.getDesktopIcon().getParent();
  191.          if (var2 == null) {
  192.             return;
  193.          }
  194.       }
  195.  
  196.       if (var5 == null) {
  197.          if (var4 != null) {
  198.             var4.setSelectedFrame(var1);
  199.          }
  200.       } else if (var5 != var1) {
  201.          if (var5.isSelected()) {
  202.             try {
  203.                var5.setSelected(false);
  204.             } catch (PropertyVetoException var7) {
  205.             }
  206.          }
  207.  
  208.          if (var4 != null) {
  209.             var4.setSelectedFrame(var1);
  210.          }
  211.       }
  212.  
  213.       var1.moveToFront();
  214.    }
  215.  
  216.    public void deactivateFrame(JInternalFrame var1) {
  217.       JDesktopPane var2 = var1.getDesktopPane();
  218.       JInternalFrame var3 = var2 == null ? null : var2.getSelectedFrame();
  219.       if (var3 == var1) {
  220.          var2.setSelectedFrame((JInternalFrame)null);
  221.       }
  222.  
  223.    }
  224.  
  225.    public void beginDraggingFrame(JComponent var1) {
  226.       this.setupDragMode(var1);
  227.       if (this.dragMode == 2) {
  228.          this.floatingItems = this.findFloatingItems(var1);
  229.          this.currentBounds = ((Component)var1).getBounds();
  230.          this.desktopBounds = ((Component)var1).getParent().getBounds();
  231.          this.desktopBounds.x = 0;
  232.          this.desktopBounds.y = 0;
  233.          this.desktopGraphics = ((Component)var1).getParent().getGraphics();
  234.          ((JInternalFrame)var1).isDragging = true;
  235.       }
  236.  
  237.    }
  238.  
  239.    private void setupDragMode(JComponent var1) {
  240.       JDesktopPane var2 = this.getDesktopPane(var1);
  241.       if (var2 != null) {
  242.          String var3 = (String)((JComponent)var2).getClientProperty("JDesktopPane.dragMode");
  243.          if (var3 != null && var3.equals("outline")) {
  244.             this.dragMode = 1;
  245.          } else if (var3 != null && var3.equals("faster") && var1 instanceof JInternalFrame) {
  246.             this.dragMode = 2;
  247.          } else if (var2.getDragMode() == JDesktopPane.OUTLINE_DRAG_MODE) {
  248.             this.dragMode = 1;
  249.          } else if (var2.getDragMode() == JDesktopPane.LIVE_DRAG_MODE && var1 instanceof JInternalFrame) {
  250.             this.dragMode = 2;
  251.          } else {
  252.             this.dragMode = 0;
  253.          }
  254.       }
  255.  
  256.    }
  257.  
  258.    public void dragFrame(JComponent var1, int var2, int var3) {
  259.       if (this.dragMode == 1) {
  260.          JDesktopPane var4 = this.getDesktopPane(var1);
  261.          if (var4 != null) {
  262.             Graphics var5 = ((JComponent)var4).getGraphics();
  263.             var5.setXORMode(Color.white);
  264.             if (this.currentLoc != null) {
  265.                var5.drawRect(this.currentLoc.x, this.currentLoc.y, var1.getWidth() - 1, var1.getHeight() - 1);
  266.             }
  267.  
  268.             var5.drawRect(var2, var3, var1.getWidth() - 1, var1.getHeight() - 1);
  269.             this.currentLoc = new Point(var2, var3);
  270.             var5.dispose();
  271.          }
  272.       } else if (this.dragMode == 2) {
  273.          this.dragFrameFaster(var1, var2, var3);
  274.       } else {
  275.          this.setBoundsForFrame(var1, var2, var3, var1.getWidth(), var1.getHeight());
  276.       }
  277.  
  278.    }
  279.  
  280.    public void endDraggingFrame(JComponent var1) {
  281.       if (this.dragMode == 1 && this.currentLoc != null) {
  282.          this.setBoundsForFrame(var1, this.currentLoc.x, this.currentLoc.y, var1.getWidth(), var1.getHeight());
  283.          this.currentLoc = null;
  284.       } else if (this.dragMode == 2) {
  285.          this.currentBounds = null;
  286.          if (this.desktopGraphics != null) {
  287.             this.desktopGraphics.dispose();
  288.             this.desktopGraphics = null;
  289.          }
  290.  
  291.          this.desktopBounds = null;
  292.          ((JInternalFrame)var1).isDragging = false;
  293.       }
  294.  
  295.    }
  296.  
  297.    public void beginResizingFrame(JComponent var1, int var2) {
  298.       this.setupDragMode(var1);
  299.    }
  300.  
  301.    public void resizeFrame(JComponent var1, int var2, int var3, int var4, int var5) {
  302.       if (this.dragMode != 0 && this.dragMode != 2) {
  303.          JDesktopPane var6 = this.getDesktopPane(var1);
  304.          if (var6 != null) {
  305.             Graphics var7 = ((JComponent)var6).getGraphics();
  306.             var7.setXORMode(Color.white);
  307.             if (this.currentBounds != null) {
  308.                var7.drawRect(this.currentBounds.x, this.currentBounds.y, this.currentBounds.width - 1, this.currentBounds.height - 1);
  309.             }
  310.  
  311.             var7.drawRect(var2, var3, var4 - 1, var5 - 1);
  312.             this.currentBounds = new Rectangle(var2, var3, var4, var5);
  313.             var7.setPaintMode();
  314.             var7.dispose();
  315.          }
  316.       } else {
  317.          this.setBoundsForFrame(var1, var2, var3, var4, var5);
  318.       }
  319.  
  320.    }
  321.  
  322.    public void endResizingFrame(JComponent var1) {
  323.       if (this.dragMode == 1 && this.currentBounds != null) {
  324.          this.setBoundsForFrame(var1, this.currentBounds.x, this.currentBounds.y, this.currentBounds.width, this.currentBounds.height);
  325.          this.currentBounds = null;
  326.       }
  327.  
  328.    }
  329.  
  330.    public void setBoundsForFrame(JComponent var1, int var2, int var3, int var4, int var5) {
  331.       boolean var6 = var1.getWidth() != var4 || var1.getHeight() != var5;
  332.       ((Component)var1).setBounds(var2, var3, var4, var5);
  333.       if (var6) {
  334.          ((Container)var1).validate();
  335.       }
  336.  
  337.    }
  338.  
  339.    protected void removeIconFor(JInternalFrame var1) {
  340.       JInternalFrame.JDesktopIcon var2 = var1.getDesktopIcon();
  341.       Container var3 = ((Component)var2).getParent();
  342.       if (var3 != null) {
  343.          var3.remove(var2);
  344.          ((Component)var3).repaint(((JComponent)var2).getX(), ((JComponent)var2).getY(), ((JComponent)var2).getWidth(), ((JComponent)var2).getHeight());
  345.       }
  346.  
  347.    }
  348.  
  349.    protected Rectangle getBoundsForIconOf(JInternalFrame var1) {
  350.       JInternalFrame.JDesktopIcon var2 = var1.getDesktopIcon();
  351.       Dimension var3 = ((JComponent)var2).getPreferredSize();
  352.       Container var4 = ((Component)var1).getParent();
  353.       if (var4 == null) {
  354.          return new Rectangle(0, 0, var3.width, var3.height);
  355.       } else {
  356.          Rectangle var5 = ((Component)var4).getBounds();
  357.          Component[] var6 = var4.getComponents();
  358.          Rectangle var7 = null;
  359.          JInternalFrame.JDesktopIcon var8 = null;
  360.          int var9 = 0;
  361.          int var10 = var5.height - var3.height;
  362.          int var11 = var3.width;
  363.          int var12 = var3.height;
  364.          boolean var13 = false;
  365.  
  366.          while(!var13) {
  367.             var7 = new Rectangle(var9, var10, var11, var12);
  368.             var13 = true;
  369.  
  370.             for(int var14 = 0; var14 < var6.length; ++var14) {
  371.                if (var6[var14] instanceof JInternalFrame) {
  372.                   var8 = ((JInternalFrame)var6[var14]).getDesktopIcon();
  373.                } else {
  374.                   if (!(var6[var14] instanceof JInternalFrame.JDesktopIcon)) {
  375.                      continue;
  376.                   }
  377.  
  378.                   var8 = (JInternalFrame.JDesktopIcon)var6[var14];
  379.                }
  380.  
  381.                if (!var8.equals(var2) && var7.intersects(((Component)var8).getBounds())) {
  382.                   var13 = false;
  383.                   break;
  384.                }
  385.             }
  386.  
  387.             if (var8 == null) {
  388.                return var7;
  389.             }
  390.  
  391.             var9 += ((Component)var8).getBounds().width;
  392.             if (var9 + var11 > var5.width) {
  393.                var9 = 0;
  394.                var10 -= var12;
  395.             }
  396.          }
  397.  
  398.          return var7;
  399.       }
  400.    }
  401.  
  402.    protected void setPreviousBounds(JInternalFrame var1, Rectangle var2) {
  403.       var1.setNormalBounds(var2);
  404.    }
  405.  
  406.    protected Rectangle getPreviousBounds(JInternalFrame var1) {
  407.       return var1.getNormalBounds();
  408.    }
  409.  
  410.    protected void setWasIcon(JInternalFrame var1, Boolean var2) {
  411.       if (var2 != null) {
  412.          ((JComponent)var1).putClientProperty("wasIconOnce", var2);
  413.       }
  414.  
  415.    }
  416.  
  417.    protected boolean wasIcon(JInternalFrame var1) {
  418.       return ((JComponent)var1).getClientProperty("wasIconOnce") == Boolean.TRUE;
  419.    }
  420.  
  421.    JDesktopPane getDesktopPane(JComponent var1) {
  422.       JDesktopPane var2 = null;
  423.       Container var3 = ((Component)var1).getParent();
  424.  
  425.       while(var2 == null) {
  426.          if (var3 instanceof JDesktopPane) {
  427.             var2 = (JDesktopPane)var3;
  428.          } else {
  429.             if (var3 == null) {
  430.                break;
  431.             }
  432.  
  433.             var3 = ((Component)var3).getParent();
  434.          }
  435.       }
  436.  
  437.       return var2;
  438.    }
  439.  
  440.    private void dragFrameFaster(JComponent var1, int var2, int var3) {
  441.       Rectangle var4 = new Rectangle(this.currentBounds.x, this.currentBounds.y, this.currentBounds.width, this.currentBounds.height);
  442.       this.currentBounds.x = var2;
  443.       this.currentBounds.y = var3;
  444.       this.emergencyCleanup(var1);
  445.       boolean var5 = this.isFloaterCollision(var4, this.currentBounds);
  446.       Rectangle var6 = var4.intersection(this.desktopBounds);
  447.       if (!var5) {
  448.          this.desktopGraphics.copyArea(var6.x, var6.y, var6.width, var6.height, var2 - var4.x, var3 - var4.y);
  449.       }
  450.  
  451.       JComponent var7 = (JComponent)((Component)var1).getParent();
  452.       ((Component)var1).setBounds(this.currentBounds);
  453.       if (var5) {
  454.          ((JInternalFrame)var1).isDragging = false;
  455.          var7.paintImmediately(this.currentBounds);
  456.          ((JInternalFrame)var1).isDragging = true;
  457.       }
  458.  
  459.       RepaintManager var8 = RepaintManager.currentManager(var1);
  460.       var8.markCompletelyClean(var7);
  461.       var8.markCompletelyClean(var1);
  462.       Object var9 = null;
  463.       Rectangle[] var12;
  464.       if (var4.intersects(this.currentBounds)) {
  465.          var12 = SwingUtilities.computeDifference(var4, this.currentBounds);
  466.       } else {
  467.          var12 = new Rectangle[]{var4};
  468.       }
  469.  
  470.       for(int var10 = 0; var10 < var12.length; ++var10) {
  471.          var7.paintImmediately(var12[var10]);
  472.       }
  473.  
  474.       if (!var6.equals(var4)) {
  475.          var12 = SwingUtilities.computeDifference(var4, this.desktopBounds);
  476.  
  477.          for(int var11 = 0; var11 < var12.length; ++var11) {
  478.             var12[var11].x += var2 - var4.x;
  479.             var12[var11].y += var3 - var4.y;
  480.             ((JInternalFrame)var1).isDragging = false;
  481.             var7.paintImmediately(var12[var11]);
  482.             ((JInternalFrame)var1).isDragging = true;
  483.          }
  484.       }
  485.  
  486.    }
  487.  
  488.    private boolean isFloaterCollision(Rectangle var1, Rectangle var2) {
  489.       if (this.floatingItems.length == 0) {
  490.          return false;
  491.       } else {
  492.          for(int var3 = 0; var3 < this.floatingItems.length; ++var3) {
  493.             boolean var4 = var1.intersects(this.floatingItems[var3]);
  494.             if (var4) {
  495.                return true;
  496.             }
  497.  
  498.             boolean var5 = var2.intersects(this.floatingItems[var3]);
  499.             if (var5) {
  500.                return true;
  501.             }
  502.          }
  503.  
  504.          return false;
  505.       }
  506.    }
  507.  
  508.    private Rectangle[] findFloatingItems(JComponent var1) {
  509.       Container var2 = ((Component)var1).getParent();
  510.       Component[] var3 = var2.getComponents();
  511.       int var4 = 0;
  512.  
  513.       for(var4 = 0; var4 < var3.length && var3[var4] != var1; ++var4) {
  514.       }
  515.  
  516.       Rectangle[] var5 = new Rectangle[var4];
  517.  
  518.       for(int var7 = 0; var7 < var5.length; ++var7) {
  519.          var5[var7] = var3[var7].getBounds();
  520.       }
  521.  
  522.       return var5;
  523.    }
  524.  
  525.    private void emergencyCleanup(JComponent var1) {
  526.       if (((JInternalFrame)var1).danger) {
  527.          SwingUtilities.invokeLater(new 1(this, var1));
  528.          ((JInternalFrame)var1).danger = false;
  529.       }
  530.  
  531.    }
  532. }
  533.