feat(jdk8): move files to new folder to avoid resources compiled.
This commit is contained in:
@@ -0,0 +1,375 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle in the LICENSE file that accompanied this code.
|
||||
*
|
||||
* This code 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
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
package com.sun.java.swing.plaf.motif;
|
||||
|
||||
import sun.swing.SwingUtilities2;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.*;
|
||||
import javax.swing.plaf.*;
|
||||
import javax.swing.plaf.basic.*;
|
||||
import java.beans.*;
|
||||
import java.util.EventListener;
|
||||
import java.io.Serializable;
|
||||
|
||||
import sun.awt.AWTAccessor;
|
||||
import sun.awt.AWTAccessor.MouseEventAccessor;
|
||||
|
||||
/**
|
||||
* Motif rendition of the component.
|
||||
*
|
||||
* @author Thomas Ball
|
||||
* @author Rich Schiavi
|
||||
*/
|
||||
public class MotifDesktopIconUI extends BasicDesktopIconUI
|
||||
{
|
||||
protected DesktopIconActionListener desktopIconActionListener;
|
||||
protected DesktopIconMouseListener desktopIconMouseListener;
|
||||
|
||||
protected Icon defaultIcon;
|
||||
protected IconButton iconButton;
|
||||
protected IconLabel iconLabel;
|
||||
|
||||
// This is only used for its system menu, but we need a reference to it so
|
||||
// we can remove its listeners.
|
||||
private MotifInternalFrameTitlePane sysMenuTitlePane;
|
||||
|
||||
JPopupMenu systemMenu;
|
||||
EventListener mml;
|
||||
|
||||
final static int LABEL_HEIGHT = 18;
|
||||
final static int LABEL_DIVIDER = 4; // padding between icon and label
|
||||
|
||||
final static Font defaultTitleFont =
|
||||
new Font(Font.SANS_SERIF, Font.PLAIN, 12);
|
||||
|
||||
public static ComponentUI createUI(JComponent c) {
|
||||
return new MotifDesktopIconUI();
|
||||
}
|
||||
|
||||
public MotifDesktopIconUI() {
|
||||
}
|
||||
|
||||
protected void installDefaults(){
|
||||
super.installDefaults();
|
||||
setDefaultIcon(UIManager.getIcon("DesktopIcon.icon"));
|
||||
iconButton = createIconButton(defaultIcon);
|
||||
// An underhanded way of creating a system popup menu.
|
||||
sysMenuTitlePane = new MotifInternalFrameTitlePane(frame);
|
||||
systemMenu = sysMenuTitlePane.getSystemMenu();
|
||||
|
||||
MotifBorders.FrameBorder border = new MotifBorders.FrameBorder(desktopIcon);
|
||||
desktopIcon.setLayout(new BorderLayout());
|
||||
iconButton.setBorder(border);
|
||||
desktopIcon.add(iconButton, BorderLayout.CENTER);
|
||||
iconLabel = createIconLabel(frame);
|
||||
iconLabel.setBorder(border);
|
||||
desktopIcon.add(iconLabel, BorderLayout.SOUTH);
|
||||
desktopIcon.setSize(desktopIcon.getPreferredSize());
|
||||
desktopIcon.validate();
|
||||
JLayeredPane.putLayer(desktopIcon, JLayeredPane.getLayer(frame));
|
||||
}
|
||||
|
||||
protected void installComponents(){
|
||||
}
|
||||
|
||||
protected void uninstallComponents(){
|
||||
}
|
||||
|
||||
protected void installListeners(){
|
||||
super.installListeners();
|
||||
desktopIconActionListener = createDesktopIconActionListener();
|
||||
desktopIconMouseListener = createDesktopIconMouseListener();
|
||||
iconButton.addActionListener(desktopIconActionListener);
|
||||
iconButton.addMouseListener(desktopIconMouseListener);
|
||||
iconLabel.addMouseListener(desktopIconMouseListener);
|
||||
}
|
||||
|
||||
JInternalFrame.JDesktopIcon getDesktopIcon(){
|
||||
return desktopIcon;
|
||||
}
|
||||
|
||||
void setDesktopIcon(JInternalFrame.JDesktopIcon d){
|
||||
desktopIcon = d;
|
||||
}
|
||||
|
||||
JInternalFrame getFrame(){
|
||||
return frame;
|
||||
}
|
||||
|
||||
void setFrame(JInternalFrame f){
|
||||
frame = f ;
|
||||
}
|
||||
|
||||
protected void showSystemMenu(){
|
||||
systemMenu.show(iconButton, 0, getDesktopIcon().getHeight());
|
||||
}
|
||||
|
||||
protected void hideSystemMenu(){
|
||||
systemMenu.setVisible(false);
|
||||
}
|
||||
|
||||
protected IconLabel createIconLabel(JInternalFrame frame){
|
||||
return new IconLabel(frame);
|
||||
}
|
||||
|
||||
protected IconButton createIconButton(Icon i){
|
||||
return new IconButton(i);
|
||||
}
|
||||
|
||||
protected DesktopIconActionListener createDesktopIconActionListener(){
|
||||
return new DesktopIconActionListener();
|
||||
}
|
||||
|
||||
protected DesktopIconMouseListener createDesktopIconMouseListener(){
|
||||
return new DesktopIconMouseListener();
|
||||
}
|
||||
|
||||
protected void uninstallDefaults(){
|
||||
super.uninstallDefaults();
|
||||
desktopIcon.setLayout(null);
|
||||
desktopIcon.remove(iconButton);
|
||||
desktopIcon.remove(iconLabel);
|
||||
}
|
||||
|
||||
protected void uninstallListeners(){
|
||||
super.uninstallListeners();
|
||||
iconButton.removeActionListener(desktopIconActionListener);
|
||||
iconButton.removeMouseListener(desktopIconMouseListener);
|
||||
sysMenuTitlePane.uninstallListeners();
|
||||
}
|
||||
|
||||
public Dimension getMinimumSize(JComponent c) {
|
||||
JInternalFrame iframe = desktopIcon.getInternalFrame();
|
||||
|
||||
int w = defaultIcon.getIconWidth();
|
||||
int h = defaultIcon.getIconHeight() + LABEL_HEIGHT + LABEL_DIVIDER;
|
||||
|
||||
Border border = iframe.getBorder();
|
||||
if(border != null) {
|
||||
w += border.getBorderInsets(iframe).left +
|
||||
border.getBorderInsets(iframe).right;
|
||||
h += border.getBorderInsets(iframe).bottom +
|
||||
border.getBorderInsets(iframe).top;
|
||||
}
|
||||
|
||||
return new Dimension(w, h);
|
||||
}
|
||||
|
||||
public Dimension getPreferredSize(JComponent c) {
|
||||
return getMinimumSize(c);
|
||||
}
|
||||
|
||||
public Dimension getMaximumSize(JComponent c){
|
||||
return getMinimumSize(c);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the default desktop icon.
|
||||
*/
|
||||
public Icon getDefaultIcon() {
|
||||
return defaultIcon;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the icon used as the default desktop icon.
|
||||
*/
|
||||
public void setDefaultIcon(Icon newIcon) {
|
||||
defaultIcon = newIcon;
|
||||
}
|
||||
|
||||
protected class IconLabel extends JPanel {
|
||||
JInternalFrame frame;
|
||||
|
||||
IconLabel(JInternalFrame f) {
|
||||
super();
|
||||
this.frame = f;
|
||||
setFont(defaultTitleFont);
|
||||
|
||||
// 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) {
|
||||
MouseEvent newEvent = new MouseEvent(
|
||||
getParent(), e.getID(), e.getWhen(), e.getModifiers(),
|
||||
e.getX(), e.getY(), e.getXOnScreen(),
|
||||
e.getYOnScreen(), e.getClickCount(),
|
||||
e.isPopupTrigger(), MouseEvent.NOBUTTON);
|
||||
MouseEventAccessor meAccessor = AWTAccessor.getMouseEventAccessor();
|
||||
meAccessor.setCausedByTouchEvent(newEvent,
|
||||
meAccessor.isCausedByTouchEvent(e));
|
||||
getParent().dispatchEvent(newEvent);
|
||||
}
|
||||
|
||||
public boolean isFocusTraversable() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public Dimension getMinimumSize() {
|
||||
return new Dimension(defaultIcon.getIconWidth() + 1,
|
||||
LABEL_HEIGHT + LABEL_DIVIDER);
|
||||
}
|
||||
|
||||
public Dimension getPreferredSize() {
|
||||
String title = frame.getTitle();
|
||||
FontMetrics fm = frame.getFontMetrics(defaultTitleFont);
|
||||
int w = 4;
|
||||
if (title != null) {
|
||||
w += SwingUtilities2.stringWidth(frame, fm, title);
|
||||
}
|
||||
return new Dimension(w, LABEL_HEIGHT + LABEL_DIVIDER);
|
||||
}
|
||||
|
||||
public void paint(Graphics g) {
|
||||
super.paint(g);
|
||||
|
||||
// touch-up frame
|
||||
int maxX = getWidth() - 1;
|
||||
Color shadow =
|
||||
UIManager.getColor("inactiveCaptionBorder").darker().darker();
|
||||
g.setColor(shadow);
|
||||
g.setClip(0, 0, getWidth(), getHeight());
|
||||
g.drawLine(maxX - 1, 1, maxX - 1, 1);
|
||||
g.drawLine(maxX, 0, maxX, 0);
|
||||
|
||||
// fill background
|
||||
g.setColor(UIManager.getColor("inactiveCaption"));
|
||||
g.fillRect(2, 1, maxX - 3, LABEL_HEIGHT + 1);
|
||||
|
||||
// draw text -- clipping to truncate text like CDE/Motif
|
||||
g.setClip(2, 1, maxX - 4, LABEL_HEIGHT);
|
||||
int y = LABEL_HEIGHT - SwingUtilities2.getFontMetrics(frame, g).
|
||||
getDescent();
|
||||
g.setColor(UIManager.getColor("inactiveCaptionText"));
|
||||
String title = frame.getTitle();
|
||||
if (title != null) {
|
||||
SwingUtilities2.drawString(frame, g, title, 4, y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected class IconButton extends JButton {
|
||||
Icon icon;
|
||||
|
||||
IconButton(Icon icon) {
|
||||
super(icon);
|
||||
this.icon = icon;
|
||||
// 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) {
|
||||
if (!systemMenu.isShowing()) {
|
||||
forwardEventToParent(e);
|
||||
}
|
||||
}
|
||||
public void mouseEntered(MouseEvent e) {
|
||||
forwardEventToParent(e);
|
||||
}
|
||||
public void mouseExited(MouseEvent e) {
|
||||
forwardEventToParent(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void forwardEventToParent(MouseEvent e) {
|
||||
MouseEvent newEvent = new MouseEvent(
|
||||
getParent(), e.getID(), e.getWhen(), e.getModifiers(),
|
||||
e.getX(), e.getY(), e.getXOnScreen(), e.getYOnScreen(),
|
||||
e.getClickCount(), e.isPopupTrigger(), MouseEvent.NOBUTTON );
|
||||
MouseEventAccessor meAccessor = AWTAccessor.getMouseEventAccessor();
|
||||
meAccessor.setCausedByTouchEvent(newEvent,
|
||||
meAccessor.isCausedByTouchEvent(e));
|
||||
getParent().dispatchEvent(newEvent);
|
||||
}
|
||||
|
||||
public boolean isFocusTraversable() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected class DesktopIconActionListener implements ActionListener {
|
||||
public void actionPerformed(ActionEvent e){
|
||||
systemMenu.show(iconButton, 0, getDesktopIcon().getHeight());
|
||||
}
|
||||
}
|
||||
|
||||
protected class DesktopIconMouseListener extends MouseAdapter {
|
||||
// if we drag or move we should deengage the popup
|
||||
public void mousePressed(MouseEvent e){
|
||||
if (e.getClickCount() > 1) {
|
||||
try {
|
||||
getFrame().setIcon(false);
|
||||
} catch (PropertyVetoException e2){ }
|
||||
systemMenu.setVisible(false);
|
||||
/* the mouse release will not get reported correctly,
|
||||
because the icon will no longer be in the hierarchy;
|
||||
maybe that should be fixed, but until it is, we need
|
||||
to do the required cleanup here. */
|
||||
getFrame().getDesktopPane().getDesktopManager().endDraggingFrame((JComponent)e.getSource());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user