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

  1. package com.sun.java.swing.plaf.metal;
  2.  
  3. import com.sun.java.swing.ButtonModel;
  4. import com.sun.java.swing.Icon;
  5. import com.sun.java.swing.JButton;
  6. import com.sun.java.swing.JComponent;
  7. import com.sun.java.swing.JInternalFrame;
  8. import com.sun.java.swing.JMenuBar;
  9. import com.sun.java.swing.UIManager;
  10. import com.sun.java.swing.border.Border;
  11. import com.sun.java.swing.border.EmptyBorder;
  12. import com.sun.java.swing.event.InternalFrameEvent;
  13. import com.sun.java.swing.plaf.ColorUIResource;
  14. import java.awt.Color;
  15. import java.awt.Component;
  16. import java.awt.Container;
  17. import java.awt.Dimension;
  18. import java.awt.Font;
  19. import java.awt.FontMetrics;
  20. import java.awt.Graphics;
  21. import java.awt.LayoutManager;
  22. import java.awt.Toolkit;
  23. import java.awt.event.ActionEvent;
  24. import java.awt.event.ActionListener;
  25. import java.beans.PropertyChangeEvent;
  26. import java.beans.PropertyChangeListener;
  27. import java.beans.PropertyVetoException;
  28. import java.util.EventObject;
  29.  
  30. class MetalInternalFrameTitlePane extends JComponent implements LayoutManager, ActionListener, PropertyChangeListener {
  31.    protected JMenuBar menuBar;
  32.    protected boolean isPalette = false;
  33.    JInternalFrame frame;
  34.    protected JButton iconButton;
  35.    protected JButton maxButton;
  36.    protected JButton closeButton;
  37.    private static final Border handyEmptyBorder = new EmptyBorder(0, 0, 0, 0);
  38.    Icon maxIcon;
  39.    Icon altMaxIcon;
  40.    Icon iconIcon;
  41.    Icon closeIcon;
  42.    int riseWidth;
  43.    int interButtonSpacing = 3;
  44.    MetalBumps activeBumps = new MetalBumps(0, 0, MetalLookAndFeel.getPrimaryControlHighlight(), MetalLookAndFeel.getPrimaryControlDarkShadow(), MetalLookAndFeel.getPrimaryControl());
  45.    MetalBumps inactiveBumps = new MetalBumps(0, 0, MetalLookAndFeel.getControlHighlight(), MetalLookAndFeel.getControlDarkShadow(), MetalLookAndFeel.getControl());
  46.    // $FF: synthetic field
  47.    static Class class$com$sun$java$swing$JInternalFrame;
  48.  
  49.    public MetalInternalFrameTitlePane(JInternalFrame var1) {
  50.       this.frame = var1;
  51.       ((Component)this).setFont(UIManager.getFont("InternalFrameTitlePane.font"));
  52.       this.maxIcon = (Icon)UIManager.get("InternalFrameTitlePane.maximizeIcon");
  53.       this.altMaxIcon = (Icon)UIManager.get("InternalFrameTitlePane.altMaximizeIcon");
  54.       this.iconIcon = (Icon)UIManager.get("InternalFrameTitlePane.iconizeIcon");
  55.       this.closeIcon = (Icon)UIManager.get("InternalFrameTitlePane.closeIcon");
  56.       this.iconButton = new JButton(this.iconIcon);
  57.       this.iconButton.putClientProperty("paintActive", Boolean.TRUE);
  58.       this.iconButton.setFocusPainted(false);
  59.       this.iconButton.setBorder(handyEmptyBorder);
  60.       this.iconButton.setOpaque(false);
  61.       this.iconButton.addActionListener(this);
  62.       this.iconButton.setActionCommand("Iconify");
  63.       this.maxButton = new JButton(this.maxIcon);
  64.       this.maxButton.putClientProperty("paintActive", Boolean.TRUE);
  65.       this.maxButton.setBorder(handyEmptyBorder);
  66.       this.maxButton.setOpaque(false);
  67.       this.maxButton.setFocusPainted(false);
  68.       this.maxButton.addActionListener(this);
  69.       this.maxButton.setActionCommand("Maximize");
  70.       this.closeButton = new JButton(this.closeIcon);
  71.       this.closeButton.putClientProperty("paintActive", Boolean.TRUE);
  72.       this.closeButton.setBorder(handyEmptyBorder);
  73.       this.closeButton.setOpaque(false);
  74.       this.closeButton.setFocusPainted(false);
  75.       this.closeButton.addActionListener(this);
  76.       this.closeButton.setActionCommand("Close");
  77.       ((Container)this).setLayout(this);
  78.       ((Container)this).add(this.iconButton);
  79.       ((Container)this).add(this.maxButton);
  80.       ((Container)this).add(this.closeButton);
  81.       this.frame.addPropertyChangeListener(this);
  82.    }
  83.  
  84.    public void paint(Graphics var1) {
  85.       boolean var2 = this.frame.isSelected();
  86.       int var3 = ((JComponent)this).getWidth();
  87.       int var4 = ((JComponent)this).getHeight();
  88.       Color var11 = ((JInternalFrame)((Component)this).getParent()).getContentPane().getBackground();
  89.       ColorUIResource var5;
  90.       ColorUIResource var6;
  91.       ColorUIResource var7;
  92.       ColorUIResource var8;
  93.       ColorUIResource var9;
  94.       MetalBumps var10;
  95.       if (var2) {
  96.          var5 = MetalLookAndFeel.getWindowTitleBackground();
  97.          var6 = MetalLookAndFeel.getWindowTitleForeground();
  98.          var7 = MetalLookAndFeel.getPrimaryControlShadow();
  99.          var8 = MetalLookAndFeel.getPrimaryControlDarkShadow();
  100.          var9 = MetalLookAndFeel.getPrimaryControlHighlight();
  101.          var10 = this.activeBumps;
  102.       } else {
  103.          var5 = MetalLookAndFeel.getWindowTitleInactiveBackground();
  104.          var6 = MetalLookAndFeel.getWindowTitleInactiveForeground();
  105.          var7 = MetalLookAndFeel.getControlShadow();
  106.          var8 = MetalLookAndFeel.getControlDarkShadow();
  107.          var9 = MetalLookAndFeel.getControlHighlight();
  108.          var10 = this.inactiveBumps;
  109.       }
  110.  
  111.       var1.setColor(var5);
  112.       var1.fillRect(0, 0, var3, var4);
  113.       var1.setColor(var9);
  114.       var1.drawRect(0, 0, var3 - 1, var3 - 1);
  115.       var1.fillRect(0, 0, 2, 2);
  116.       var1.setColor(var7);
  117.       var1.drawLine(1, var4 - 2, var3 - 2, var4 - 2);
  118.       var1.drawLine(var3 - 1, 1, var3 - 1, var4 - 2);
  119.       var1.setColor(var8);
  120.       var1.drawLine(0, var4 - 1, var3, var4 - 1);
  121.       var1.drawLine(0, 0, 0, 0);
  122.       var1.drawLine(var3 - 1, 0, var3 - 1, 0);
  123.       int var12 = 0;
  124.       int var13 = 5;
  125.       if (this.frame.getTitle() != null) {
  126.          Font var14 = ((Component)this).getFont();
  127.          var1.setFont(var14);
  128.          FontMetrics var15 = var1.getFontMetrics();
  129.          var15.getHeight();
  130.          Icon var16 = this.frame.getFrameIcon();
  131.          if (var16 != null) {
  132.             int var17 = var4 / 2 - var16.getIconHeight() / 2 - 1;
  133.             var16.paintIcon(this.frame, var1, var13, var17);
  134.             var13 += var16.getIconWidth() + 2;
  135.          }
  136.  
  137.          var1.setColor(var6);
  138.          int var22 = var4 / 4 + 2;
  139.          var1.drawString(this.frame.getTitle(), var13, ((JComponent)this).getHeight() - var22);
  140.          var12 = var15.stringWidth(this.frame.getTitle());
  141.       }
  142.  
  143.       var13 += var12 + this.interButtonSpacing;
  144.       int var20 = ((JComponent)this).getWidth() - (var13 + this.riseWidth + this.interButtonSpacing);
  145.       int var21 = ((JComponent)this).getHeight() - 2 * this.interButtonSpacing - 2;
  146.       var10.setBumpArea(var20, var21);
  147.       var10.paintIcon(this, var1, var13, this.interButtonSpacing);
  148.       if (this.riseWidth != 0) {
  149.          var13 += var20 - 1;
  150.          var1.setColor(var5);
  151.          var1.fillRect(var13 - 1, var4 - 7, 7, 3);
  152.          var1.setColor(var8);
  153.          var1.drawLine(var13, var4 - 2, var13 + 1, var4 - 2);
  154.          var1.drawLine(var13 + 2, var4 - 3, var13 + 2, var4 - 3);
  155.          var1.drawLine(var13 + 3, var4 - 4, var13 + 4, var4 - 4);
  156.          var1.drawLine(var13 + 5, var4 - 5, var3, var4 - 5);
  157.          var1.setColor(var7);
  158.          var1.drawLine(var13 - 1, var4 - 3, var13 + 1, var4 - 3);
  159.          var1.drawLine(var13 + 1, var4 - 4, var13 + 2, var4 - 4);
  160.          var1.drawLine(var13 + 2, var4 - 5, var13 + 4, var4 - 5);
  161.          var1.drawLine(var13 + 4, var4 - 6, var3, var4 - 6);
  162.          var1.setColor(var11);
  163.          var1.drawLine(var13, var4 - 1, var3, var4 - 1);
  164.          var1.drawLine(var13 + 2, var4 - 2, var3, var4 - 2);
  165.          var1.drawLine(var13 + 3, var4 - 3, var3, var4 - 3);
  166.          var1.drawLine(var13 + 5, var4 - 4, var3, var4 - 4);
  167.       }
  168.  
  169.       ((JComponent)this).paintChildren(var1);
  170.    }
  171.  
  172.    void postClosingEvent(JInternalFrame var1) {
  173.       InternalFrameEvent var2 = new InternalFrameEvent(var1, 25550);
  174.       if ((class$com$sun$java$swing$JInternalFrame != null ? class$com$sun$java$swing$JInternalFrame : (class$com$sun$java$swing$JInternalFrame = class$("com.sun.java.swing.JInternalFrame"))).getClassLoader() == null) {
  175.          try {
  176.             Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(var2);
  177.             return;
  178.          } catch (SecurityException var3) {
  179.          }
  180.       }
  181.  
  182.       ((Component)this).dispatchEvent(var2);
  183.    }
  184.  
  185.    public void actionPerformed(ActionEvent var1) {
  186.       if ("Close".equals(var1.getActionCommand()) && this.frame.isClosable()) {
  187.          this.postClosingEvent(this.frame);
  188.       } else {
  189.          if ("Iconify".equals(var1.getActionCommand()) && this.frame.isIconifiable()) {
  190.             if (!this.frame.isIcon()) {
  191.                try {
  192.                   this.frame.setIcon(true);
  193.                } catch (PropertyVetoException var9) {
  194.                }
  195.             } else {
  196.                try {
  197.                   this.frame.setIcon(false);
  198.                } catch (PropertyVetoException var8) {
  199.                }
  200.             }
  201.  
  202.             ButtonModel var2 = this.iconButton.getModel();
  203.             if (var2 != null) {
  204.                var2.setRollover(false);
  205.                return;
  206.             }
  207.          } else {
  208.             if ("Minimize".equals(var1.getActionCommand()) && this.frame.isMaximizable()) {
  209.                try {
  210.                   this.frame.setIcon(true);
  211.                   return;
  212.                } catch (PropertyVetoException var3) {
  213.                   return;
  214.                }
  215.             }
  216.  
  217.             if ("Maximize".equals(var1.getActionCommand()) && this.frame.isMaximizable()) {
  218.                if (!this.frame.isMaximum()) {
  219.                   try {
  220.                      this.frame.setMaximum(true);
  221.                      return;
  222.                   } catch (PropertyVetoException var4) {
  223.                      return;
  224.                   }
  225.                }
  226.  
  227.                try {
  228.                   this.frame.setMaximum(false);
  229.                   return;
  230.                } catch (PropertyVetoException var5) {
  231.                   return;
  232.                }
  233.             }
  234.  
  235.             if ("Restore".equals(var1.getActionCommand()) && this.frame.isMaximizable() && this.frame.isMaximum()) {
  236.                try {
  237.                   this.frame.setMaximum(false);
  238.                   return;
  239.                } catch (PropertyVetoException var6) {
  240.                   return;
  241.                }
  242.             }
  243.  
  244.             if ("Restore".equals(var1.getActionCommand()) && this.frame.isIconifiable() && this.frame.isIcon()) {
  245.                try {
  246.                   this.frame.setIcon(false);
  247.                   return;
  248.                } catch (PropertyVetoException var7) {
  249.                   return;
  250.                }
  251.             }
  252.          }
  253.  
  254.       }
  255.    }
  256.  
  257.    public void propertyChange(PropertyChangeEvent var1) {
  258.       String var2 = var1.getPropertyName();
  259.       JInternalFrame var10000 = (JInternalFrame)((EventObject)var1).getSource();
  260.       boolean var3 = false;
  261.       if (this.frame.isSelected()) {
  262.          this.iconButton.putClientProperty("paintActive", Boolean.TRUE);
  263.          this.closeButton.putClientProperty("paintActive", Boolean.TRUE);
  264.          this.maxButton.putClientProperty("paintActive", Boolean.TRUE);
  265.          ((Component)this).repaint();
  266.       } else {
  267.          this.iconButton.putClientProperty("paintActive", Boolean.FALSE);
  268.          this.closeButton.putClientProperty("paintActive", Boolean.FALSE);
  269.          this.maxButton.putClientProperty("paintActive", Boolean.FALSE);
  270.          ((Component)this).repaint();
  271.       }
  272.  
  273.       if ("isSelected".equals(var2)) {
  274.          ((Component)this).repaint();
  275.       } else if ("isMaximum".equals(var2)) {
  276.          var3 = (Boolean)var1.getNewValue();
  277.          if (var3) {
  278.             this.maxButton.setIcon(this.altMaxIcon);
  279.          } else {
  280.             this.maxButton.setIcon(this.maxIcon);
  281.          }
  282.       } else {
  283.          if ("isIcon".equals(var2)) {
  284.             var3 = (Boolean)var1.getNewValue();
  285.             if (var3) {
  286.                this.iconButton.setIcon(this.iconIcon);
  287.                return;
  288.             }
  289.  
  290.             this.iconButton.setIcon(this.iconIcon);
  291.          }
  292.  
  293.       }
  294.    }
  295.  
  296.    public void addLayoutComponent(String var1, Component var2) {
  297.    }
  298.  
  299.    public void removeLayoutComponent(Component var1) {
  300.    }
  301.  
  302.    public Dimension preferredLayoutSize(Container var1) {
  303.       return this.getPreferredSize(var1);
  304.    }
  305.  
  306.    public Dimension getPreferredSize(Container var1) {
  307.       return new Dimension(((Component)var1).getSize().width, this.computeHeight());
  308.    }
  309.  
  310.    public Dimension minimumLayoutSize(Container var1) {
  311.       return this.preferredLayoutSize(var1);
  312.    }
  313.  
  314.    protected int computeHeight() {
  315.       FontMetrics var1 = Toolkit.getDefaultToolkit().getFontMetrics(((Component)this).getFont());
  316.       int var2 = var1.getHeight();
  317.       var2 = (int)((double)var2 * (double)1.5F);
  318.       ++var2;
  319.       return var2;
  320.    }
  321.  
  322.    public void layoutContainer(Container var1) {
  323.       int var2 = ((JComponent)this).getWidth();
  324.       byte var3 = 12;
  325.       byte var4 = 12;
  326.       int var5 = var2;
  327.       if (this.frame.isClosable()) {
  328.          var5 = var2 - (var4 + this.interButtonSpacing);
  329.          this.closeButton.setBounds(var5, this.interButtonSpacing, var4, var3);
  330.       } else if (this.closeButton.getParent() != null) {
  331.          this.closeButton.getParent().remove(this.closeButton);
  332.       }
  333.  
  334.       if (this.frame.isMaximizable()) {
  335.          var5 -= var4 + this.interButtonSpacing;
  336.          this.maxButton.setBounds(var5, this.interButtonSpacing, var4, var3);
  337.       } else if (this.maxButton.getParent() != null) {
  338.          this.maxButton.getParent().remove(this.maxButton);
  339.       }
  340.  
  341.       if (this.frame.isIconifiable()) {
  342.          var5 -= var4 + this.interButtonSpacing;
  343.          this.iconButton.setBounds(var5, this.interButtonSpacing, var4, var3);
  344.       } else if (this.iconButton.getParent() != null) {
  345.          this.iconButton.getParent().remove(this.iconButton);
  346.       }
  347.  
  348.       this.riseWidth = var2 - var5;
  349.    }
  350.  
  351.    public void setPalette(boolean var1) {
  352.       this.isPalette = var1;
  353.       ((Component)this).repaint();
  354.    }
  355.  
  356.    // $FF: synthetic method
  357.    static Class class$(String var0) {
  358.       try {
  359.          return Class.forName(var0);
  360.       } catch (ClassNotFoundException var2) {
  361.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  362.       }
  363.    }
  364. }
  365.