summaryrefslogtreecommitdiffstats
path: root/libjava/javax/swing/plaf/basic/BasicInternalFrameUI.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/javax/swing/plaf/basic/BasicInternalFrameUI.java')
-rw-r--r--libjava/javax/swing/plaf/basic/BasicInternalFrameUI.java1652
1 files changed, 0 insertions, 1652 deletions
diff --git a/libjava/javax/swing/plaf/basic/BasicInternalFrameUI.java b/libjava/javax/swing/plaf/basic/BasicInternalFrameUI.java
deleted file mode 100644
index 6b81c37f212..00000000000
--- a/libjava/javax/swing/plaf/basic/BasicInternalFrameUI.java
+++ /dev/null
@@ -1,1652 +0,0 @@
-/* BasicInternalFrameUI.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package javax.swing.plaf.basic;
-
-import java.awt.AWTEvent;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Dimension;
-import java.awt.Graphics;
-import java.awt.Insets;
-import java.awt.LayoutManager;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.event.ComponentEvent;
-import java.awt.event.ComponentListener;
-import java.awt.event.MouseEvent;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-
-import javax.swing.DefaultDesktopManager;
-import javax.swing.DesktopManager;
-import javax.swing.JComponent;
-import javax.swing.JDesktopPane;
-import javax.swing.JInternalFrame;
-import javax.swing.KeyStroke;
-import javax.swing.SwingConstants;
-import javax.swing.SwingUtilities;
-import javax.swing.border.AbstractBorder;
-import javax.swing.event.InternalFrameEvent;
-import javax.swing.event.InternalFrameListener;
-import javax.swing.event.MouseInputAdapter;
-import javax.swing.event.MouseInputListener;
-import javax.swing.plaf.ComponentUI;
-import javax.swing.plaf.InternalFrameUI;
-import javax.swing.plaf.UIResource;
-
-/**
- * This is the UI delegate for the Basic look and feel for JInternalFrames.
- */
-public class BasicInternalFrameUI extends InternalFrameUI
-{
- /**
- * This is a helper class that listens to the JInternalFrame for
- * InternalFrameEvents.
- */
- protected class BasicInternalFrameListener implements InternalFrameListener
- {
- /**
- * This method is called when the JInternalFrame is activated.
- *
- * @param e The InternalFrameEvent.
- */
- public void internalFrameActivated(InternalFrameEvent e)
- {
- // FIXME: Implement.
- }
-
- /**
- * This method is called when the JInternalFrame is closed.
- *
- * @param e The InternalFrameEvent.
- */
- public void internalFrameClosed(InternalFrameEvent e)
- {
- // FIXME: Implement.
- }
-
- /**
- * This method is called when the JInternalFrame is closing.
- *
- * @param e The InternalFrameEvent.
- */
- public void internalFrameClosing(InternalFrameEvent e)
- {
- // FIXME: Implement.
- }
-
- /**
- * This method is called when the JInternalFrame is deactivated.
- *
- * @param e The InternalFrameEvent.
- */
- public void internalFrameDeactivated(InternalFrameEvent e)
- {
- // FIXME: Implement.
- }
-
- /**
- * This method is called when the JInternalFrame is deiconified.
- *
- * @param e The InternalFrameEvent.
- */
- public void internalFrameDeiconified(InternalFrameEvent e)
- {
- // FIXME: Implement.
- }
-
- /**
- * This method is called when the JInternalFrame is iconified.
- *
- * @param e The InternalFrameEvent.
- */
- public void internalFrameIconified(InternalFrameEvent e)
- {
- // FIXME: Implement.
- }
-
- /**
- * This method is called when the JInternalFrame is opened.
- *
- * @param e The InternalFrameEvent.
- */
- public void internalFrameOpened(InternalFrameEvent e)
- {
- // FIXME: Implement.
- }
- }
-
- /**
- * This helper class listens to the edges of the JInternalFrame and the
- * TitlePane for mouse events. It is responsible for dragging and resizing
- * the JInternalFrame in response to the MouseEvents.
- */
- protected class BorderListener extends MouseInputAdapter
- implements SwingConstants
- {
- /** FIXME: Use for something. */
- protected int RESIZE_NONE;
-
- /** The x offset from the top left corner of the JInternalFrame. */
- private transient int xOffset = 0;
-
- /** The y offset from the top left corner of the JInternalFrame. */
- private transient int yOffset = 0;
-
- /** The direction that the resize is occuring in. */
- private transient int direction = -1;
-
- /** Cache rectangle that can be reused. */
- private transient Rectangle cacheRect = new Rectangle();
-
- /**
- * This method is called when the mouse is clicked.
- *
- * @param e The MouseEvent.
- */
- public void mouseClicked(MouseEvent e)
- {
- // There is nothing to do when the mouse is clicked
- // on the border.
- }
-
- /**
- * This method is called when the mouse is dragged. This method is
- * responsible for resizing or dragging the JInternalFrame.
- *
- * @param e The MouseEvent.
- */
- public void mouseDragged(MouseEvent e)
- {
- // If the frame is maximized, there is nothing that
- // can be dragged around.
- if (frame.isMaximum())
- return;
- DesktopManager dm = getDesktopManager();
- Rectangle b = frame.getBounds();
- Dimension min = frame.getMinimumSize();
- if (min == null)
- min = new Dimension(0, 0);
- Insets insets = frame.getInsets();
- int x = e.getX();
- int y = e.getY();
- if (e.getSource() == frame && frame.isResizable())
- {
- switch (direction)
- {
- case NORTH:
- cacheRect.setBounds(b.x,
- Math.min(b.y + y, b.y + b.height
- - min.height), b.width, b.height
- - y);
- break;
- case NORTH_EAST:
- cacheRect.setBounds(b.x,
- Math.min(b.y + y, b.y + b.height
- - min.height), x, b.height - y);
- break;
- case EAST:
- cacheRect.setBounds(b.x, b.y, x, b.height);
- break;
- case SOUTH_EAST:
- cacheRect.setBounds(b.x, b.y, x, y);
- break;
- case SOUTH:
- cacheRect.setBounds(b.x, b.y, b.width, y);
- break;
- case SOUTH_WEST:
- cacheRect.setBounds(Math.min(b.x + x, b.x + b.width - min.width),
- b.y, b.width - x, y);
- break;
- case WEST:
- cacheRect.setBounds(Math.min(b.x + x, b.x + b.width - min.width),
- b.y, b.width - x, b.height);
- break;
- case NORTH_WEST:
- cacheRect.setBounds(Math.min(b.x + x, b.x + b.width - min.width),
- Math.min(b.y + y, b.y + b.height
- - min.height), b.width - x,
- b.height - y);
- break;
- }
- dm.resizeFrame(frame, cacheRect.x, cacheRect.y,
- Math.max(min.width, cacheRect.width),
- Math.max(min.height, cacheRect.height));
- }
- else if (e.getSource() == titlePane)
- {
- Rectangle fBounds = frame.getBounds();
-
- dm.dragFrame(frame, e.getX() - xOffset + b.x,
- e.getY() - yOffset + b.y);
- }
- }
-
- /**
- * This method is called when the mouse exits the JInternalFrame.
- *
- * @param e The MouseEvent.
- */
- public void mouseExited(MouseEvent e)
- {
- // There is nothing to do when the mouse exits
- // the border area.
- }
-
- /**
- * This method is called when the mouse is moved inside the
- * JInternalFrame.
- *
- * @param e The MouseEvent.
- */
- public void mouseMoved(MouseEvent e)
- {
- // There is nothing to do when the mouse moves
- // over the border area.
- }
-
- /**
- * This method is called when the mouse is pressed.
- *
- * @param e The MouseEvent.
- */
- public void mousePressed(MouseEvent e)
- {
- activateFrame(frame);
- DesktopManager dm = getDesktopManager();
- int x = e.getX();
- int y = e.getY();
- Insets insets = frame.getInsets();
-
- if (e.getSource() == frame && frame.isResizable())
- {
- direction = sectionOfClick(x, y);
- dm.beginResizingFrame(frame, direction);
- }
- else if (e.getSource() == titlePane)
- {
- Rectangle tBounds = titlePane.getBounds();
-
- xOffset = e.getX() - tBounds.x + insets.left;
- yOffset = e.getY() - tBounds.y + insets.top;
-
- dm.beginDraggingFrame(frame);
- }
- }
-
- /**
- * This method is called when the mouse is released.
- *
- * @param e The MouseEvent.
- */
- public void mouseReleased(MouseEvent e)
- {
- DesktopManager dm = getDesktopManager();
- xOffset = 0;
- yOffset = 0;
- if (e.getSource() == frame && frame.isResizable())
- dm.endResizingFrame(frame);
- else if (e.getSource() == titlePane)
- dm.endDraggingFrame(frame);
- }
-
- /**
- * This method determines the direction of the resize based on the
- * coordinates and the size of the JInternalFrame.
- *
- * @param x The x coordinate of the MouseEvent.
- * @param y The y coordinate of the MouseEvent.
- *
- * @return The direction of the resize (a SwingConstant direction).
- */
- private int sectionOfClick(int x, int y)
- {
- Insets insets = frame.getInsets();
- Rectangle b = frame.getBounds();
- if (x < insets.left && y < insets.top)
- return NORTH_WEST;
- else if (x > b.width - insets.right && y < insets.top)
- return NORTH_EAST;
- else if (x > b.width - insets.right && y > b.height - insets.bottom)
- return SOUTH_EAST;
- else if (x < insets.left && y > b.height - insets.bottom)
- return SOUTH_WEST;
- else if (y < insets.top)
- return NORTH;
- else if (x < insets.left)
- return WEST;
- else if (y > b.height - insets.bottom)
- return SOUTH;
- else if (x > b.width - insets.right)
- return EAST;
-
- return -1;
- }
- }
-
- /**
- * This helper class listens to the JDesktopPane that parents this
- * JInternalFrame and listens for resize events and resizes the
- * JInternalFrame appropriately.
- */
- protected class ComponentHandler implements ComponentListener
- {
- /**
- * This method is called when the JDesktopPane is hidden.
- *
- * @param e The ComponentEvent fired.
- */
- public void componentHidden(ComponentEvent e)
- {
- // Do nothing.
- }
-
- /**
- * This method is called when the JDesktopPane is moved.
- *
- * @param e The ComponentEvent fired.
- */
- public void componentMoved(ComponentEvent e)
- {
- // Do nothing.
- }
-
- /**
- * This method is called when the JDesktopPane is resized.
- *
- * @param e The ComponentEvent fired.
- */
- public void componentResized(ComponentEvent e)
- {
- if (frame.isMaximum())
- {
- JDesktopPane pane = (JDesktopPane) e.getSource();
- Insets insets = pane.getInsets();
- Rectangle bounds = pane.getBounds();
-
- frame.setBounds(bounds.x + insets.left, bounds.y + insets.top,
- bounds.width - insets.left - insets.right,
- bounds.height - insets.top - insets.bottom);
- frame.revalidate();
- frame.repaint();
- }
-
- // Sun also resizes the icons. but it doesn't seem to do anything.
- }
-
- /**
- * This method is called when the JDesktopPane is shown.
- *
- * @param e The ComponentEvent fired.
- */
- public void componentShown(ComponentEvent e)
- {
- // Do nothing.
- }
- }
-
- /**
- * This helper class acts as the LayoutManager for JInternalFrames.
- */
- public class InternalFrameLayout implements LayoutManager
- {
- /**
- * This method is called when the given Component is added to the
- * JInternalFrame.
- *
- * @param name The name of the Component.
- * @param c The Component added.
- */
- public void addLayoutComponent(String name, Component c)
- {
- }
-
- /**
- * This method is used to set the bounds of the children of the
- * JInternalFrame.
- *
- * @param c The Container to lay out.
- */
- public void layoutContainer(Container c)
- {
- Dimension dims = frame.getSize();
- Insets insets = frame.getInsets();
-
- dims.width -= insets.left + insets.right;
- dims.height -= insets.top + insets.bottom;
-
- frame.getRootPane().getGlassPane().setBounds(0, 0, dims.width,
- dims.height);
- int nh = 0;
- int sh = 0;
- int ew = 0;
- int ww = 0;
-
- if (northPane != null)
- {
- Dimension nDims = northPane.getPreferredSize();
- nh = Math.min(nDims.height, dims.height);
-
- northPane.setBounds(insets.left, insets.top, dims.width, nh);
- }
-
- if (southPane != null)
- {
- Dimension sDims = southPane.getPreferredSize();
- sh = Math.min(sDims.height, dims.height - nh);
-
- southPane.setBounds(insets.left, insets.top + dims.height - sh,
- dims.width, sh);
- }
-
- int remHeight = dims.height - sh - nh;
-
- if (westPane != null)
- {
- Dimension wDims = westPane.getPreferredSize();
- ww = Math.min(dims.width, wDims.width);
-
- westPane.setBounds(insets.left, insets.top + nh, ww, remHeight);
- }
-
- if (eastPane != null)
- {
- Dimension eDims = eastPane.getPreferredSize();
- ew = Math.min(eDims.width, dims.width - ww);
-
- eastPane.setBounds(insets.left + dims.width - ew, insets.top + nh,
- ew, remHeight);
- }
-
- int remWidth = dims.width - ww - ew;
-
- frame.getRootPane().setBounds(insets.left + ww, insets.top + nh,
- remWidth, remHeight);
- }
-
- /**
- * This method returns the minimum layout size.
- *
- * @param c The Container to find a minimum layout size for.
- *
- * @return The minimum dimensions for the JInternalFrame.
- */
- public Dimension minimumLayoutSize(Container c)
- {
- return getSize(c, true);
- }
-
- /**
- * This method returns the maximum layout size.
- *
- * @param c The Container to find a maximum layout size for.
- *
- * @return The maximum dimensions for the JInternalFrame.
- */
- public Dimension maximumLayoutSize(Container c)
- {
- return preferredLayoutSize(c);
- }
-
- /**
- * Th8is method returns the preferred layout size.
- *
- * @param c The Container to find a preferred layout size for.
- *
- * @return The preferred dimensions for the JInternalFrame.
- */
- public Dimension preferredLayoutSize(Container c)
- {
- return getSize(c, false);
- }
-
- /**
- * DOCUMENT ME!
- *
- * @param c DOCUMENT ME!
- * @param min DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
- private Dimension getSize(Container c, boolean min)
- {
- Insets insets = frame.getInsets();
-
- Dimension contentDims = frame.getContentPane().getPreferredSize();
- if (min)
- contentDims.width = contentDims.height = 0;
- int nWidth = 0;
- int nHeight = 0;
- int sWidth = 0;
- int sHeight = 0;
- int eWidth = 0;
- int eHeight = 0;
- int wWidth = 0;
- int wHeight = 0;
- Dimension dims;
-
- if (northPane != null)
- {
- dims = northPane.getPreferredSize();
- if (dims != null)
- {
- nWidth = dims.width;
- nHeight = dims.height;
- }
- }
-
- if (southPane != null)
- {
- dims = southPane.getPreferredSize();
- if (dims != null)
- {
- sWidth = dims.width;
- sHeight = dims.height;
- }
- }
-
- if (eastPane != null)
- {
- dims = eastPane.getPreferredSize();
- if (dims != null)
- {
- sWidth = dims.width;
- sHeight = dims.height;
- }
- }
-
- if (westPane != null)
- {
- dims = westPane.getPreferredSize();
- if (dims != null)
- {
- wWidth = dims.width;
- wHeight = dims.height;
- }
- }
-
- int width = Math.max(sWidth, nWidth);
- width = Math.max(width, contentDims.width + eWidth + wWidth);
-
- int height = Math.max(eHeight, wHeight);
- height = Math.max(height, contentDims.height);
- height += nHeight + sHeight;
-
- width += insets.left + insets.right;
- height += insets.top + insets.bottom;
-
- return new Dimension(width, height);
- }
-
- /**
- * This method is called when a Component is removed from the
- * JInternalFrame.
- *
- * @param c The Component that was removed.
- */
- public void removeLayoutComponent(Component c)
- {
- }
- }
-
- /**
- * This helper class is used to listen to the JDesktopPane's glassPane for
- * MouseEvents. The JInternalFrame can then be selected if a click is
- * detected on its children.
- */
- protected class GlassPaneDispatcher implements MouseInputListener
- {
- /** The MouseEvent target. */
- private transient Component mouseEventTarget;
-
- /** The component pressed. */
- private transient Component pressedComponent;
-
- /** The last component entered. */
- private transient Component lastComponentEntered;
-
- /** The number of presses. */
- private transient int pressCount;
-
- /**
- * This method is called when the mouse enters the glass pane.
- *
- * @param e The MouseEvent.
- */
- public void mouseEntered(MouseEvent e)
- {
- handleEvent(e);
- }
-
- /**
- * This method is called when the mouse is clicked on the glass pane.
- *
- * @param e The MouseEvent.
- */
- public void mouseClicked(MouseEvent e)
- {
- handleEvent(e);
- }
-
- /**
- * This method is called when the mouse is dragged in the glass pane.
- *
- * @param e The MouseEvent.
- */
- public void mouseDragged(MouseEvent e)
- {
- handleEvent(e);
- }
-
- /**
- * This method is called when the mouse exits the glass pane.
- *
- * @param e The MouseEvent.
- */
- public void mouseExited(MouseEvent e)
- {
- handleEvent(e);
- }
-
- /**
- * This method is called when the mouse is moved in the glass pane.
- *
- * @param e The MouseEvent.
- */
- public void mouseMoved(MouseEvent e)
- {
- handleEvent(e);
- }
-
- /**
- * This method is called when the mouse is pressed in the glass pane.
- *
- * @param e The MouseEvent.
- */
- public void mousePressed(MouseEvent e)
- {
- activateFrame(frame);
- handleEvent(e);
- }
-
- /**
- * This method is called when the mouse is released in the glass pane.
- *
- * @param e The MouseEvent.
- */
- public void mouseReleased(MouseEvent e)
- {
- handleEvent(e);
- }
-
- /**
- * This method acquires a candidate component to dispatch the MouseEvent
- * to.
- *
- * @param me The MouseEvent to acquire a component for.
- */
- private void acquireComponentForMouseEvent(MouseEvent me)
- {
- int x = me.getX();
- int y = me.getY();
-
- // Find the candidate which should receive this event.
- Component parent = frame.getContentPane();
- if (parent == null)
- return;
- Component candidate = null;
- Point p = me.getPoint();
- while (candidate == null && parent != null)
- {
- candidate = SwingUtilities.getDeepestComponentAt(parent, p.x, p.y);
- if (candidate == null)
- {
- p = SwingUtilities.convertPoint(parent, p.x, p.y,
- parent.getParent());
- parent = parent.getParent();
- }
- }
-
- // If the only candidate we found was the native container itself,
- // don't dispatch any event at all. We only care about the lightweight
- // children here.
- if (candidate == frame.getContentPane())
- candidate = null;
-
- // If our candidate is new, inform the old target we're leaving.
- if (lastComponentEntered != null && lastComponentEntered.isShowing()
- && lastComponentEntered != candidate)
- {
- Point tp = SwingUtilities.convertPoint(frame.getContentPane(), x, y,
- lastComponentEntered);
- MouseEvent exited = new MouseEvent(lastComponentEntered,
- MouseEvent.MOUSE_EXITED,
- me.getWhen(), me.getModifiersEx(),
- tp.x, tp.y, me.getClickCount(),
- me.isPopupTrigger(),
- me.getButton());
- lastComponentEntered.dispatchEvent(exited);
- lastComponentEntered = null;
- }
-
- // If we have a candidate, maybe enter it.
- if (candidate != null)
- {
- mouseEventTarget = candidate;
- if (candidate.isLightweight() && candidate.isShowing()
- && candidate != frame.getContentPane()
- && candidate != lastComponentEntered)
- {
- lastComponentEntered = mouseEventTarget;
- Point cp = SwingUtilities.convertPoint(frame.getContentPane(),
- x, y, lastComponentEntered);
- MouseEvent entered = new MouseEvent(lastComponentEntered,
- MouseEvent.MOUSE_ENTERED,
- me.getWhen(),
- me.getModifiersEx(), cp.x,
- cp.y, me.getClickCount(),
- me.isPopupTrigger(),
- me.getButton());
- lastComponentEntered.dispatchEvent(entered);
- }
- }
-
- if (me.getID() == MouseEvent.MOUSE_RELEASED
- || me.getID() == MouseEvent.MOUSE_PRESSED && pressCount > 0
- || me.getID() == MouseEvent.MOUSE_DRAGGED)
- // If any of the following events occur while a button is held down,
- // they should be dispatched to the same component to which the
- // original MOUSE_PRESSED event was dispatched:
- // - MOUSE_RELEASED
- // - MOUSE_PRESSED: another button pressed while the first is held down
- // - MOUSE_DRAGGED
- mouseEventTarget = pressedComponent;
- else if (me.getID() == MouseEvent.MOUSE_CLICKED)
- {
- // Don't dispatch CLICKED events whose target is not the same as the
- // target for the original PRESSED event.
- if (candidate != pressedComponent)
- mouseEventTarget = null;
- else if (pressCount == 0)
- pressedComponent = null;
- }
- }
-
- /**
- * This is a helper method that dispatches the GlassPane MouseEvents to
- * the proper component.
- *
- * @param e The AWTEvent to be dispatched. Usually an instance of
- * MouseEvent.
- */
- private void handleEvent(AWTEvent e)
- {
- if (e instanceof MouseEvent)
- {
- MouseEvent me = SwingUtilities.convertMouseEvent(frame.getRootPane()
- .getGlassPane(),
- (MouseEvent) e,
- frame.getRootPane()
- .getGlassPane());
-
- acquireComponentForMouseEvent(me);
-
- // Avoid dispatching ENTERED and EXITED events twice.
- if (mouseEventTarget != null && mouseEventTarget.isShowing()
- && e.getID() != MouseEvent.MOUSE_ENTERED
- && e.getID() != MouseEvent.MOUSE_EXITED)
- {
- MouseEvent newEvt = SwingUtilities.convertMouseEvent(frame
- .getContentPane(),
- me,
- mouseEventTarget);
- mouseEventTarget.dispatchEvent(newEvt);
-
- switch (e.getID())
- {
- case MouseEvent.MOUSE_PRESSED:
- if (pressCount++ == 0)
- pressedComponent = mouseEventTarget;
- break;
- case MouseEvent.MOUSE_RELEASED:
- // Clear our memory of the original PRESSED event, only if
- // we're not expecting a CLICKED event after this. If
- // there is a CLICKED event after this, it will do clean up.
- if (--pressCount == 0
- && mouseEventTarget != pressedComponent)
- pressedComponent = null;
- break;
- }
- }
- }
- }
- }
-
- /**
- * This helper class listens for PropertyChangeEvents from the
- * JInternalFrame.
- */
- public class InternalFramePropertyChangeListener
- implements PropertyChangeListener
- {
- /**
- * This method is called when one of the JInternalFrame's properties
- * change.
- *
- * @param evt The PropertyChangeEvent.
- */
- public void propertyChange(PropertyChangeEvent evt)
- {
- if (evt.getPropertyName().equals(JInternalFrame.IS_MAXIMUM_PROPERTY))
- {
- if (frame.isMaximum())
- maximizeFrame(frame);
- else
- minimizeFrame(frame);
- }
- else if (evt.getPropertyName().equals(JInternalFrame.IS_CLOSED_PROPERTY))
- closeFrame(frame);
- else if (evt.getPropertyName().equals(JInternalFrame.IS_ICON_PROPERTY))
- {
- if (frame.isIcon())
- iconifyFrame(frame);
- else
- deiconifyFrame(frame);
- }
- else if (evt.getPropertyName().equals(JInternalFrame.IS_SELECTED_PROPERTY))
- {
- if (frame.isSelected())
- activateFrame(frame);
- else
- getDesktopManager().deactivateFrame(frame);
- }
- else if (evt.getPropertyName().equals(JInternalFrame.ROOT_PANE_PROPERTY)
- || evt.getPropertyName().equals(JInternalFrame.GLASS_PANE_PROPERTY))
- {
- Component old = (Component) evt.getOldValue();
- old.removeMouseListener(glassPaneDispatcher);
- old.removeMouseMotionListener(glassPaneDispatcher);
-
- Component newPane = (Component) evt.getNewValue();
- newPane.addMouseListener(glassPaneDispatcher);
- newPane.addMouseMotionListener(glassPaneDispatcher);
-
- frame.revalidate();
- }
- /* FIXME: need to add ancestor properties to JComponents.
- else if (evt.getPropertyName().equals(JComponent.ANCESTOR_PROPERTY))
- {
- if (desktopPane != null)
- desktopPane.removeComponentListener(componentListener);
- desktopPane = frame.getDesktopPane();
- if (desktopPane != null)
- desktopPane.addComponentListener(componentListener);
- }
- */
- }
- }
-
- /**
- * This helper class is the border for the JInternalFrame.
- */
- private class InternalFrameBorder extends AbstractBorder
- implements UIResource
- {
- /** The width of the border. */
- private static final int bSize = 5;
-
- /** The size of the corners. */
- private static final int offset = 10;
-
- /**
- * This method returns whether the border is opaque.
- *
- * @return Whether the border is opaque.
- */
- public boolean isBorderOpaque()
- {
- return true;
- }
-
- /**
- * This method returns the insets of the border.
- *
- * @param c The Component to find border insets for.
- *
- * @return The border insets.
- */
- public Insets getBorderInsets(Component c)
- {
- return new Insets(bSize, bSize, bSize, bSize);
- }
-
- /**
- * This method paints the border.
- *
- * @param c The Component that owns the border.
- * @param g The Graphics object to paint with.
- * @param x The x coordinate to paint at.
- * @param y The y coordinate to paint at.
- * @param width The width of the Component.
- * @param height The height of the Component.
- */
- public void paintBorder(Component c, Graphics g, int x, int y, int width,
- int height)
- {
- g.translate(x, y);
- Color saved = g.getColor();
- Rectangle b = frame.getBounds();
-
- Color d = c.getBackground();
- g.setColor(d);
- g.fillRect(0, 0, bSize, b.height);
- g.fillRect(0, 0, b.width, bSize);
- g.fillRect(0, b.height - bSize, b.width, bSize);
- g.fillRect(b.width - bSize, 0, bSize, b.height);
-
- int x1 = 0;
- int x2 = bSize;
- int x3 = b.width - bSize;
- int x4 = b.width;
-
- int y1 = 0;
- int y2 = bSize;
- int y3 = b.height - bSize;
- int y4 = b.height;
-
- g.setColor(Color.GRAY);
- g.fillRect(0, 0, bSize, y4);
- g.fillRect(0, 0, x4, bSize);
- g.fillRect(0, y3, b.width, bSize);
- g.fillRect(x3, 0, bSize, b.height);
-
- g.fill3DRect(0, offset, bSize, b.height - 2 * offset, false);
- g.fill3DRect(offset, 0, b.width - 2 * offset, bSize, false);
- g.fill3DRect(offset, b.height - bSize, b.width - 2 * offset, bSize, false);
- g.fill3DRect(b.width - bSize, offset, bSize, b.height - 2 * offset, false);
-
- g.translate(-x, -y);
- g.setColor(saved);
- }
- }
-
- /**
- * The MouseListener that is responsible for dragging and resizing the
- * JInternalFrame in response to MouseEvents.
- */
- protected MouseInputAdapter borderListener;
-
- /**
- * The ComponentListener that is responsible for resizing the JInternalFrame
- * in response to ComponentEvents from the JDesktopPane.
- */
- protected ComponentListener componentListener;
-
- /**
- * The MouseListener that is responsible for activating the JInternalFrame
- * when the mouse press activates one of its descendents.
- */
- protected MouseInputListener glassPaneDispatcher;
-
- /**
- * The PropertyChangeListener that is responsible for listening to
- * PropertyChangeEvents from the JInternalFrame.
- */
- protected PropertyChangeListener propertyChangeListener;
-
- /** The InternalFrameListener that listens to the JInternalFrame. */
- private transient BasicInternalFrameListener internalFrameListener;
-
- /** The JComponent placed at the east region of the JInternalFrame. */
- protected JComponent eastPane;
-
- /** The JComponent placed at the north region of the JInternalFrame. */
- protected JComponent northPane;
-
- /** The JComponent placed at the south region of the JInternalFrame. */
- protected JComponent southPane;
-
- /** The JComponent placed at the west region of the JInternalFrame. */
- protected JComponent westPane;
-
- /**
- * The Keystroke bound to open the menu.
- * @deprecated
- */
- protected KeyStroke openMenuKey;
-
- /** The TitlePane displayed at the top of the JInternalFrame. */
- protected BasicInternalFrameTitlePane titlePane;
-
- /** The JInternalFrame this UI is responsible for. */
- protected JInternalFrame frame;
-
- /** The LayoutManager used in the JInternalFrame. */
- protected LayoutManager internalFrameLayout;
-
- /** The JDesktopPane that is the parent of the JInternalFrame. */
- private transient JDesktopPane desktopPane;
-
- /**
- * Creates a new BasicInternalFrameUI object.
- *
- * @param b The JInternalFrame this UI will represent.
- */
- public BasicInternalFrameUI(JInternalFrame b)
- {
- }
-
- /**
- * This method will create a new BasicInternalFrameUI for the given
- * JComponent.
- *
- * @param b The JComponent to create a BasicInternalFrameUI for.
- *
- * @return A new BasicInternalFrameUI.
- */
- public static ComponentUI createUI(JComponent b)
- {
- return new BasicInternalFrameUI((JInternalFrame) b);
- }
-
- /**
- * This method installs a UI for the JInternalFrame.
- *
- * @param c The JComponent to install this UI on.
- */
- public void installUI(JComponent c)
- {
- if (c instanceof JInternalFrame)
- {
- frame = (JInternalFrame) c;
-
- internalFrameLayout = createLayoutManager();
- frame.setLayout(internalFrameLayout);
-
- ((JComponent) frame.getRootPane().getGlassPane()).setOpaque(false);
- frame.getRootPane().getGlassPane().setVisible(true);
-
- installDefaults();
- installListeners();
- installComponents();
- installKeyboardActions();
-
- frame.setOpaque(true);
- titlePane.setOpaque(true);
- frame.invalidate();
- }
- }
-
- /**
- * This method reverses the work done by installUI.
- *
- * @param c The JComponent to uninstall this UI for.
- */
- public void uninstallUI(JComponent c)
- {
- uninstallKeyboardActions();
- uninstallComponents();
- uninstallListeners();
- uninstallDefaults();
-
- frame.setLayout(null);
- ((JComponent) frame.getRootPane().getGlassPane()).setOpaque(true);
- frame.getRootPane().getGlassPane().setVisible(false);
-
- frame = null;
- }
-
- /**
- * This method installs the defaults specified by the look and feel.
- */
- protected void installDefaults()
- {
- // FIXME: Move border to MetalBorders
- frame.setBorder(new InternalFrameBorder());
- }
-
- /**
- * This method installs the keyboard actions for the JInternalFrame.
- */
- protected void installKeyboardActions()
- {
- // FIXME: Implement.
- }
-
- /**
- * This method installs the Components for the JInternalFrame.
- */
- protected void installComponents()
- {
- setNorthPane(createNorthPane(frame));
- setSouthPane(createSouthPane(frame));
- setEastPane(createEastPane(frame));
- setWestPane(createWestPane(frame));
- }
-
- /**
- * This method installs the listeners for the JInternalFrame.
- */
- protected void installListeners()
- {
- glassPaneDispatcher = createGlassPaneDispatcher();
- createInternalFrameListener();
- borderListener = createBorderListener(frame);
- componentListener = createComponentListener();
- propertyChangeListener = createPropertyChangeListener();
-
- frame.addMouseListener(borderListener);
- frame.addMouseMotionListener(borderListener);
- frame.addInternalFrameListener(internalFrameListener);
- frame.addPropertyChangeListener(propertyChangeListener);
-
- frame.getRootPane().getGlassPane().addMouseListener(glassPaneDispatcher);
- frame.getRootPane().getGlassPane().addMouseMotionListener(glassPaneDispatcher);
- }
-
- /**
- * This method uninstalls the defaults for the JInternalFrame.
- */
- protected void uninstallDefaults()
- {
- frame.setBorder(null);
- }
-
- /**
- * This method uninstalls the Components for the JInternalFrame.
- */
- protected void uninstallComponents()
- {
- setNorthPane(null);
- setSouthPane(null);
- setEastPane(null);
- setWestPane(null);
- }
-
- /**
- * This method uninstalls the listeners for the JInternalFrame.
- */
- protected void uninstallListeners()
- {
- if (desktopPane != null)
- desktopPane.removeComponentListener(componentListener);
-
- frame.getRootPane().getGlassPane().removeMouseMotionListener(glassPaneDispatcher);
- frame.getRootPane().getGlassPane().removeMouseListener(glassPaneDispatcher);
-
- frame.removePropertyChangeListener(propertyChangeListener);
- frame.removeInternalFrameListener(internalFrameListener);
- frame.removeMouseMotionListener(borderListener);
- frame.removeMouseListener(borderListener);
-
- propertyChangeListener = null;
- componentListener = null;
- borderListener = null;
- internalFrameListener = null;
- glassPaneDispatcher = null;
- }
-
- /**
- * This method uninstalls the keyboard actions for the JInternalFrame.
- */
- protected void uninstallKeyboardActions()
- {
- // FIXME: Implement.
- }
-
- /**
- * This method creates a new LayoutManager for the JInternalFrame.
- *
- * @return A new LayoutManager for the JInternalFrame.
- */
- protected LayoutManager createLayoutManager()
- {
- return new InternalFrameLayout();
- }
-
- /**
- * This method creates a new PropertyChangeListener for the JInternalFrame.
- *
- * @return A new PropertyChangeListener for the JInternalFrame.
- */
- protected PropertyChangeListener createPropertyChangeListener()
- {
- return new InternalFramePropertyChangeListener();
- }
-
- /**
- * This method returns the preferred size of the given JComponent.
- *
- * @param x The JComponent to find a preferred size for.
- *
- * @return The preferred size.
- */
- public Dimension getPreferredSize(JComponent x)
- {
- return internalFrameLayout.preferredLayoutSize(x);
- }
-
- /**
- * This method returns the minimum size of the given JComponent.
- *
- * @param x The JComponent to find a minimum size for.
- *
- * @return The minimum size.
- */
- public Dimension getMinimumSize(JComponent x)
- {
- return internalFrameLayout.minimumLayoutSize(x);
- }
-
- /**
- * This method returns the maximum size of the given JComponent.
- *
- * @param x The JComponent to find a maximum size for.
- *
- * @return The maximum size.
- */
- public Dimension getMaximumSize(JComponent x)
- {
- return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
- }
-
- /**
- * This method replaces the currentPane with the newPane. When replacing it
- * also removes the MouseHandlers for the old pane and installs them on
- * the new pane.
- *
- * @param currentPane The old pane to remove.
- * @param newPane The new pane to install.
- */
- protected void replacePane(JComponent currentPane, JComponent newPane)
- {
- if (currentPane != null)
- {
- deinstallMouseHandlers(currentPane);
- frame.remove(currentPane);
- }
-
- if (newPane != null)
- {
- installMouseHandlers(newPane);
- frame.add(newPane);
- }
- }
-
- /**
- * This method removes the necessary MouseListeners from the given
- * JComponent.
- *
- * @param c The JComponent to remove MouseListeners from.
- */
- protected void deinstallMouseHandlers(JComponent c)
- {
- c.removeMouseListener(borderListener);
- c.removeMouseMotionListener(borderListener);
- }
-
- /**
- * This method installs the necessary MouseListeners from the given
- * JComponent.
- *
- * @param c The JComponent to install MouseListeners on.
- */
- protected void installMouseHandlers(JComponent c)
- {
- c.addMouseListener(borderListener);
- c.addMouseMotionListener(borderListener);
- }
-
- /**
- * This method creates the north pane used in the JInternalFrame.
- *
- * @param w The JInternalFrame to create a north pane for.
- *
- * @return The north pane.
- */
- protected JComponent createNorthPane(JInternalFrame w)
- {
- titlePane = new BasicInternalFrameTitlePane(w);
- return titlePane;
- }
-
- /**
- * This method creates the west pane used in the JInternalFrame.
- *
- * @param w The JInternalFrame to create a west pane for.
- *
- * @return The west pane.
- */
- protected JComponent createWestPane(JInternalFrame w)
- {
- return null;
- }
-
- /**
- * This method creates the south pane used in the JInternalFrame.
- *
- * @param w The JInternalFrame to create a south pane for.
- *
- * @return The south pane.
- */
- protected JComponent createSouthPane(JInternalFrame w)
- {
- return null;
- }
-
- /**
- * This method creates the east pane used in the JInternalFrame.
- *
- * @param w The JInternalFrame to create an east pane for.
- *
- * @return The east pane.
- */
- protected JComponent createEastPane(JInternalFrame w)
- {
- return null;
- }
-
- /**
- * This method returns a new BorderListener for the given JInternalFrame.
- *
- * @param w The JIntenalFrame to create a BorderListener for.
- *
- * @return A new BorderListener.
- */
- protected MouseInputAdapter createBorderListener(JInternalFrame w)
- {
- return new BorderListener();
- }
-
- /**
- * This method creates a new InternalFrameListener for the JInternalFrame.
- */
- protected void createInternalFrameListener()
- {
- internalFrameListener = new BasicInternalFrameListener();
- }
-
- /**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
- protected final boolean isKeyBindingRegistered()
- {
- // FIXME: Implement.
- return false;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @param b DOCUMENT ME!
- */
- protected final void setKeyBindingRegistered(boolean b)
- {
- // FIXME: Implement.
- }
-
- /**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
- public final boolean isKeyBindingActive()
- {
- // FIXME: Implement.
- return false;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @param b DOCUMENT ME!
- */
- protected final void setKeyBindingActive(boolean b)
- {
- // FIXME: Implement.
- }
-
- /**
- * DOCUMENT ME!
- */
- protected void setupMenuOpenKey()
- {
- // FIXME: Implement.
- }
-
- /**
- * DOCUMENT ME!
- */
- protected void setupMenuCloseKey()
- {
- // FIXME: Implement.
- }
-
- /**
- * This method returns the north pane.
- *
- * @return The north pane.
- */
- public JComponent getNorthPane()
- {
- return northPane;
- }
-
- /**
- * This method sets the north pane to be the given JComponent.
- *
- * @param c The new north pane.
- */
- public void setNorthPane(JComponent c)
- {
- replacePane(northPane, c);
- northPane = c;
- }
-
- /**
- * This method returns the south pane.
- *
- * @return The south pane.
- */
- public JComponent getSouthPane()
- {
- return southPane;
- }
-
- /**
- * This method sets the south pane to be the given JComponent.
- *
- * @param c The new south pane.
- */
- public void setSouthPane(JComponent c)
- {
- replacePane(southPane, c);
- southPane = c;
- }
-
- /**
- * This method sets the east pane to be the given JComponent.
- *
- * @param c The new east pane.
- */
- public void setEastPane(JComponent c)
- {
- replacePane(eastPane, c);
- eastPane = c;
- }
-
- /**
- * This method returns the east pane.
- *
- * @return The east pane.
- */
- public JComponent getEastPane()
- {
- return eastPane;
- }
-
- /**
- * This method sets the west pane to be the given JComponent.
- *
- * @param c The new west pane.
- */
- public void setWestPane(JComponent c)
- {
- replacePane(westPane, c);
- westPane = c;
- }
-
- /**
- * This method returns the west pane.
- *
- * @return The west pane.
- */
- public JComponent getWestPane()
- {
- return westPane;
- }
-
- /**
- * This method returns the DesktopManager to use with the JInternalFrame.
- *
- * @return The DesktopManager to use with the JInternalFrame.
- */
- protected DesktopManager getDesktopManager()
- {
- DesktopManager value = frame.getDesktopPane().getDesktopManager();
- if (value == null)
- value = createDesktopManager();
- return value;
- }
-
- /**
- * This method returns a default DesktopManager that can be used with this
- * JInternalFrame.
- *
- * @return A default DesktopManager that can be used with this
- * JInternalFrame.
- */
- protected DesktopManager createDesktopManager()
- {
- return new DefaultDesktopManager();
- }
-
- /**
- * This is a convenience method that closes the JInternalFrame.
- *
- * @param f The JInternalFrame to close.
- */
- protected void closeFrame(JInternalFrame f)
- {
- getDesktopManager().closeFrame(f);
- }
-
- /**
- * This is a convenience method that maximizes the JInternalFrame.
- *
- * @param f The JInternalFrame to maximize.
- */
- protected void maximizeFrame(JInternalFrame f)
- {
- getDesktopManager().maximizeFrame(f);
- }
-
- /**
- * This is a convenience method that minimizes the JInternalFrame.
- *
- * @param f The JInternalFrame to minimize.
- */
- protected void minimizeFrame(JInternalFrame f)
- {
- getDesktopManager().minimizeFrame(f);
- }
-
- /**
- * This is a convenience method that iconifies the JInternalFrame.
- *
- * @param f The JInternalFrame to iconify.
- */
- protected void iconifyFrame(JInternalFrame f)
- {
- getDesktopManager().iconifyFrame(f);
- }
-
- /**
- * This is a convenience method that deiconifies the JInternalFrame.
- *
- * @param f The JInternalFrame to deiconify.
- */
- protected void deiconifyFrame(JInternalFrame f)
- {
- getDesktopManager().deiconifyFrame(f);
- }
-
- /**
- * This is a convenience method that activates the JInternalFrame.
- *
- * @param f The JInternalFrame to activate.
- */
- protected void activateFrame(JInternalFrame f)
- {
- getDesktopManager().activateFrame(f);
- }
-
- /**
- * This method returns a new ComponentListener for the JDesktopPane.
- *
- * @return A new ComponentListener.
- */
- protected ComponentListener createComponentListener()
- {
- return new ComponentHandler();
- }
-
- /**
- * This method returns a new GlassPaneDispatcher.
- *
- * @return A new GlassPaneDispatcher.
- */
- protected MouseInputListener createGlassPaneDispatcher()
- {
- return new GlassPaneDispatcher();
- }
-}
OpenPOWER on IntegriCloud