- /*
- * @(#)MotifInternalFrameTitlePane.java 1.32 04/04/15
- *
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
- */
-
- package com.sun.java.swing.plaf.motif;
-
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- import javax.swing.border.*;
- import javax.swing.event.InternalFrameEvent;
- import javax.swing.plaf.basic.*;
- import java.util.EventListener;
- import java.beans.PropertyChangeListener;
- import java.beans.PropertyChangeEvent;
- import java.beans.VetoableChangeListener;
- import java.beans.PropertyVetoException;
-
- /**
- * Class that manages a Motif title bar
- * @version 1.32 04/15/04
- *
- * @since 1.3
- */
- public class MotifInternalFrameTitlePane
- extends BasicInternalFrameTitlePane implements LayoutManager, ActionListener, PropertyChangeListener
- {
- SystemButton systemButton;
- MinimizeButton minimizeButton;
- MaximizeButton maximizeButton;
- JPopupMenu systemMenu;
- Title title;
- Color color;
- Color highlight;
- Color shadow;
-
- // The width and height of a title pane button
- public final static int BUTTON_SIZE = 19; // 17 + 1 pixel border
-
-
- public MotifInternalFrameTitlePane(JInternalFrame frame) {
- super(frame);
- }
-
- protected void installDefaults() {
- setFont(UIManager.getFont("InternalFrame.titleFont"));
- setPreferredSize(new Dimension(100, BUTTON_SIZE));
- }
-
- protected void uninstallListeners() {
- // Get around protected method in superclass
- super.uninstallListeners();
- }
-
- protected PropertyChangeListener createPropertyChangeListener() {
- return this;
- }
-
- protected LayoutManager createLayout() {
- return this;
- }
-
- JPopupMenu getSystemMenu() {
- return systemMenu;
- }
-
- protected void assembleSystemMenu() {
- systemMenu = new JPopupMenu();
- JMenuItem mi = (JMenuItem)systemMenu.add(new JMenuItem(restoreAction));
- mi.setMnemonic('R');
- mi = (JMenuItem) systemMenu.add(new JMenuItem(moveAction));
- mi.setMnemonic('M');
- mi = (JMenuItem) systemMenu.add(new JMenuItem(sizeAction));
- mi.setMnemonic('S');
- mi = (JMenuItem) systemMenu.add(new JMenuItem(iconifyAction));
- mi.setMnemonic('n');
- mi = (JMenuItem) systemMenu.add(new JMenuItem(maximizeAction));
- mi.setMnemonic('x');
- systemMenu.add(new JSeparator());
- mi = (JMenuItem) systemMenu.add(new JMenuItem(closeAction));
- mi.setMnemonic('C');
-
- systemButton = new SystemButton();
- systemButton.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- systemMenu.show(systemButton, 0, BUTTON_SIZE);
- }
- });
-
- systemButton.addMouseListener(new MouseAdapter() {
- public void mousePressed(MouseEvent evt) {
- if ((evt.getClickCount() == 2)) {
- closeAction.actionPerformed(new
- ActionEvent(evt.getSource(),
- ActionEvent.ACTION_PERFORMED,
- null, evt.getWhen(), 0));
- systemMenu.setVisible(false);
- }
- }
- });
- }
-
-
- protected void createButtons() {
- minimizeButton = new MinimizeButton();
- minimizeButton.addActionListener(iconifyAction);
-
- maximizeButton = new MaximizeButton();
- maximizeButton.addActionListener(maximizeAction);
- }
-
-
- protected void addSubComponents() {
- title = new Title(frame.getTitle());
- title.setFont(getFont());
-
- add(systemButton);
- add(title);
- add(minimizeButton);
- add(maximizeButton);
- }
-
- public void paintComponent(Graphics g) {
- }
-
- void setColors(Color c, Color h, Color s) {
- color = c;
- highlight = h;
- shadow = s;
- }
-
- public void actionPerformed(ActionEvent e) {
- }
-
- public void propertyChange(PropertyChangeEvent evt) {
- String prop = (String)evt.getPropertyName();
- JInternalFrame f = (JInternalFrame)evt.getSource();
- boolean value = false;
- if (JInternalFrame.IS_SELECTED_PROPERTY.equals(prop)) {
- repaint();
- } else if (prop.equals("maximizable")) {
- if ((Boolean)evt.getNewValue() == Boolean.TRUE)
- add(maximizeButton);
- else
- remove(maximizeButton);
- revalidate();
- repaint();
- } else if (prop.equals("iconable")) {
- if ((Boolean)evt.getNewValue() == Boolean.TRUE)
- add(minimizeButton);
- else
- remove(minimizeButton);
- revalidate();
- repaint();
- } else if (prop.equals(JInternalFrame.TITLE_PROPERTY)) {
- repaint();
- }
- enableActions();
- }
-
- public void addLayoutComponent(String name, Component c) {}
- public void removeLayoutComponent(Component c) {}
- public Dimension preferredLayoutSize(Container c) {
- return minimumLayoutSize(c);
- }
-
- public Dimension minimumLayoutSize(Container c) {
- return new Dimension(100, BUTTON_SIZE);
- }
-
- public void layoutContainer(Container c) {
- int w = getWidth();
- systemButton.setBounds(0, 0, BUTTON_SIZE, BUTTON_SIZE);
- int x = w - BUTTON_SIZE;
-
- if(frame.isMaximizable()) {
- maximizeButton.setBounds(x, 0, BUTTON_SIZE, BUTTON_SIZE);
- x -= BUTTON_SIZE;
- } else if(maximizeButton.getParent() != null) {
- maximizeButton.getParent().remove(maximizeButton);
- }
-
- if(frame.isIconifiable()) {
- minimizeButton.setBounds(x, 0, BUTTON_SIZE, BUTTON_SIZE);
- x -= BUTTON_SIZE;
- } else if(minimizeButton.getParent() != null) {
- minimizeButton.getParent().remove(minimizeButton);
- }
-
- title.setBounds(BUTTON_SIZE, 0, x, BUTTON_SIZE);
- }
-
- protected void showSystemMenu(){
- systemMenu.show(systemButton, 0, BUTTON_SIZE);
- }
-
- protected void hideSystemMenu(){
- systemMenu.setVisible(false);
- }
-
- static Dimension buttonDimension = new Dimension(BUTTON_SIZE, BUTTON_SIZE);
-
- private abstract class FrameButton extends JButton {
-
- FrameButton() {
- super();
- setFocusPainted(false);
- setBorderPainted(false);
- }
-
- public boolean isFocusTraversable() {
- return false;
- }
-
- public void requestFocus() {
- // ignore request.
- }
-
- public Dimension getMinimumSize() {
- return buttonDimension;
- }
-
- public Dimension getPreferredSize() {
- return buttonDimension;
- }
-
- public void paintComponent(Graphics g) {
- Dimension d = getSize();
- int maxX = d.width - 1;
- int maxY = d.height - 1;
-
- // draw background
- g.setColor(color);
- g.fillRect(1, 1, d.width, d.height);
-
- // draw border
- boolean pressed = getModel().isPressed();
- g.setColor(pressed ? shadow : highlight);
- g.drawLine(0, 0, maxX, 0);
- g.drawLine(0, 0, 0, maxY);
- g.setColor(pressed ? highlight : shadow);
- g.drawLine(1, maxY, maxX, maxY);
- g.drawLine(maxX, 1, maxX, maxY);
- }
- }
-
- private class MinimizeButton extends FrameButton {
- public void paintComponent(Graphics g) {
- super.paintComponent(g);
- g.setColor(highlight);
- g.drawLine(7, 8, 7, 11);
- g.drawLine(7, 8, 10, 8);
- g.setColor(shadow);
- g.drawLine(8, 11, 10, 11);
- g.drawLine(11, 9, 11, 11);
- }
- }
-
- private class MaximizeButton extends FrameButton {
- public void paintComponent(Graphics g) {
- super.paintComponent(g);
- int max = BUTTON_SIZE - 5;
- boolean isMaxed = frame.isMaximum();
- g.setColor(isMaxed ? shadow : highlight);
- g.drawLine(4, 4, 4, max);
- g.drawLine(4, 4, max, 4);
- g.setColor(isMaxed ? highlight : shadow);
- g.drawLine(5, max, max, max);
- g.drawLine(max, 5, max, max);
- }
- }
-
- private class SystemButton extends FrameButton {
- public boolean isFocusTraversable() { return false; }
- public void requestFocus() {}
-
- public void paintComponent(Graphics g) {
- super.paintComponent(g);
- g.setColor(highlight);
- g.drawLine(4, 8, 4, 11);
- g.drawLine(4, 8, BUTTON_SIZE - 5, 8);
- g.setColor(shadow);
- g.drawLine(5, 11, BUTTON_SIZE - 5, 11);
- g.drawLine(BUTTON_SIZE - 5, 9, BUTTON_SIZE - 5, 11);
- }
- }
-
- private class Title extends FrameButton {
- Title(String title) {
- super();
- setText(title);
- setHorizontalAlignment(SwingConstants.CENTER);
- setBorder(BorderFactory.createBevelBorder(
- BevelBorder.RAISED,
- UIManager.getColor("activeCaptionBorder"),
- UIManager.getColor("inactiveCaptionBorder")));
-
- // Forward mouse events to titlebar for moves.
- addMouseMotionListener(new MouseMotionListener() {
- public void mouseDragged(MouseEvent e) {
- forwardEventToParent(e);
- }
- public void mouseMoved(MouseEvent e) {
- forwardEventToParent(e);
- }
- });
- addMouseListener(new MouseListener() {
- public void mouseClicked(MouseEvent e) {
- forwardEventToParent(e);
- }
- public void mousePressed(MouseEvent e) {
- forwardEventToParent(e);
- }
- public void mouseReleased(MouseEvent e) {
- forwardEventToParent(e);
- }
- public void mouseEntered(MouseEvent e) {
- forwardEventToParent(e);
- }
- public void mouseExited(MouseEvent e) {
- forwardEventToParent(e);
- }
- });
- }
-
- void forwardEventToParent(MouseEvent e) {
- getParent().dispatchEvent(new MouseEvent(
- getParent(), e.getID(), e.getWhen(), e.getModifiers(),
- e.getX(), e.getY(), e.getClickCount(), e.isPopupTrigger()));
- }
-
- public void paintComponent(Graphics g) {
- super.paintComponent(g);
- if (frame.isSelected()) {
- g.setColor(UIManager.getColor("activeCaptionText"));
- } else {
- g.setColor(UIManager.getColor("inactiveCaptionText"));
- }
- Dimension d = getSize();
- String frameTitle = frame.getTitle();
- if (frameTitle != null) {
- MotifGraphicsUtils.drawStringInRect(frame, g, frameTitle,
- 0, 0, d.width, d.height,
- SwingConstants.CENTER);
- }
- }
- }
- }