blob: c8e82f73630026885828d578621a39b7bab3e138 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.tasklist.ui;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.Icon;
import javax.swing.JPopupMenu;
import javax.swing.JToggleButton;
import javax.swing.UIManager;
/**
*
* @author S. Aubrecht
*/
class MenuToggleButton extends JToggleButton {
private boolean mouseInArrowArea = false;
/** Creates a new instance of MenuToggleButton */
public MenuToggleButton( final Icon regIcon, Icon rollOverIcon, int arrowWidth ) {
assert null != regIcon;
assert null != rollOverIcon;
final Icon lineIcon = new LineIcon( rollOverIcon, arrowWidth );
setIcon( regIcon );
setRolloverIcon( lineIcon );
setRolloverSelectedIcon( lineIcon );
setFocusable( false );
addMouseMotionListener( new MouseMotionAdapter() {
public void mouseMoved( MouseEvent e ) {
mouseInArrowArea = isInArrowArea( e.getPoint() );
setRolloverIcon( mouseInArrowArea ? regIcon : lineIcon );
setRolloverSelectedIcon( mouseInArrowArea ? regIcon : lineIcon );
}
});
addMouseListener( new MouseAdapter() {
public void mousePressed( MouseEvent e ) {
if( isInArrowArea( e.getPoint() ) ) {
JPopupMenu popup = getPopupMenu();
if( null != popup )
popup.show( MenuToggleButton.this, 0, getHeight() );
}
}
public void mouseEntered( MouseEvent e ) {
mouseInArrowArea = isInArrowArea( e.getPoint() );
setRolloverIcon( mouseInArrowArea ? regIcon : lineIcon );
setRolloverSelectedIcon( mouseInArrowArea ? regIcon : lineIcon );
}
public void mouseExited( MouseEvent e ) {
mouseInArrowArea = false;
setRolloverIcon( regIcon );
setRolloverSelectedIcon( regIcon );
}
});
setModel( new Model() );
}
protected JPopupMenu getPopupMenu() {
return null;
}
private boolean isInArrowArea( Point p ) {
return p.getLocation().x >= getWidth() - 3 - 2 - getInsets().right;
}
private static class LineIcon implements Icon {
private Icon origIcon;
private int arrowWidth;
public LineIcon( Icon origIcon, int arrowWidth ) {
this.origIcon = origIcon;
this.arrowWidth = arrowWidth;
}
public void paintIcon( Component c, Graphics g, int x, int y ) {
origIcon.paintIcon( c, g, x, y );
g.setColor( UIManager.getColor( "controlHighlight" ) ); //NOI18N
g.drawLine( x+origIcon.getIconWidth()-arrowWidth-2, y,
x+origIcon.getIconWidth()-arrowWidth-2, y+getIconHeight() );
g.setColor( UIManager.getColor( "controlShadow" ) ); //NOI18N
g.drawLine( x+origIcon.getIconWidth()-arrowWidth-3, y,
x+origIcon.getIconWidth()-arrowWidth-3, y+getIconHeight() );
}
public int getIconWidth() {
return origIcon.getIconWidth();
}
public int getIconHeight() {
return origIcon.getIconHeight();
}
}
private class Model extends JToggleButton.ToggleButtonModel {
public void setPressed(boolean b) {
if( mouseInArrowArea )
return;
super.setPressed( b );
}
}
}