com.jidesoft.plaf.basic.BasicHeaderBoxUI Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jide-oss Show documentation
Show all versions of jide-oss Show documentation
JIDE Common Layer (Professional Swing Components)
/*
* @(#)BasicHeaderBoxUI.java 4/27/2006
*
* Copyright 2002 - 2006 JIDE Software Inc. All rights reserved.
*/
package com.jidesoft.plaf.basic;
import com.jidesoft.plaf.HeaderBoxUI;
import com.jidesoft.plaf.UIDefaultsLookup;
import com.jidesoft.swing.HeaderBox;
import javax.swing.*;
import javax.swing.event.MouseInputAdapter;
import javax.swing.plaf.ComponentUI;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
/**
* JideButtonUI implementation
*/
public class BasicHeaderBoxUI extends HeaderBoxUI {
private static HeaderBoxUI _headerBoxUI;
protected ThemePainter _painter;
public static ComponentUI createUI(JComponent c) {
if (_headerBoxUI == null) {
_headerBoxUI = new BasicHeaderBoxUI();
}
return _headerBoxUI;
}
@Override
public void installUI(JComponent c) {
HeaderBox p = (HeaderBox) c;
super.installUI(p);
installDefaults(p);
installListeners(p);
}
@Override
public void uninstallUI(JComponent c) {
HeaderBox p = (HeaderBox) c;
uninstallDefaults(p);
uninstallListeners(p);
super.uninstallUI(c);
}
protected class RolloverMouseInputAdapter extends MouseInputAdapter {
private long lastPressedTimestamp = -1;
private boolean shouldDiscardRelease = false;
@Override
public void mousePressed(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)) {
AbstractButton b = (AbstractButton) e.getSource();
if (b.contains(e.getX(), e.getY())) {
long multiClickThreshold = b.getMultiClickThreshhold();
long lastTime = lastPressedTimestamp;
long currentTime = lastPressedTimestamp = e.getWhen();
if (lastTime != -1 && currentTime - lastTime < multiClickThreshold) {
shouldDiscardRelease = true;
return;
}
ButtonModel model = b.getModel();
if (!model.isEnabled()) {
// Disabled buttons ignore all input...
return;
}
if (!model.isArmed()) {
// button not armed, should be
model.setArmed(true);
}
model.setPressed(true);
if (!b.hasFocus() && b.isRequestFocusEnabled()) {
b.requestFocus();
}
}
}
}
@Override
public void mouseReleased(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)) {
// Support for multiClickThreshhold
if (shouldDiscardRelease) {
shouldDiscardRelease = false;
return;
}
AbstractButton b = (AbstractButton) e.getSource();
ButtonModel model = b.getModel();
model.setPressed(false);
model.setArmed(false);
}
}
@Override
public void mouseEntered(MouseEvent e) {
AbstractButton b = (AbstractButton) e.getSource();
ButtonModel model = b.getModel();
if (b.isRolloverEnabled() && !SwingUtilities.isLeftMouseButton(e)) {
model.setRollover(true);
}
if (model.isPressed())
model.setArmed(true);
}
@Override
public void mouseExited(MouseEvent e) {
AbstractButton b = (AbstractButton) e.getSource();
ButtonModel model = b.getModel();
if (b.isRolloverEnabled()) {
model.setRollover(false);
}
model.setArmed(false);
}
}
protected void installListeners(JComponent c) {
MouseInputAdapter l = createHeaderBoxMouseListener();
c.addMouseListener(l);
}
/**
* Returns the ButtonListener for the passed in Button, or null if one could not be found.
*/
private RolloverMouseInputAdapter getMouseListener(HeaderBox b) {
MouseMotionListener[] listeners = b.getMouseMotionListeners();
if (listeners != null) {
for (MouseMotionListener listener : listeners) {
if (listener instanceof RolloverMouseInputAdapter) {
return (RolloverMouseInputAdapter) listener;
}
}
}
return null;
}
private RolloverMouseInputAdapter createHeaderBoxMouseListener() {
return new RolloverMouseInputAdapter();
}
protected void uninstallListeners(JComponent c) {
HeaderBox b = (HeaderBox) c;
RolloverMouseInputAdapter listener = getMouseListener(b);
if (listener != null) {
b.removeMouseListener(listener);
}
}
protected void installDefaults(HeaderBox p) {
_painter = (ThemePainter) UIDefaultsLookup.get("Theme.painter");
LookAndFeel.installColorsAndFont(p,
"Panel.background",
"Panel.foreground",
"Panel.font");
LookAndFeel.installBorder(p, "Panel.border");
}
@Override
public void paint(Graphics g, JComponent c) {
super.paint(g, c);
paintBackground(g, c);
paintBorder(g, c);
}
protected void paintBorder(Graphics g, JComponent c) {
}
protected void paintBackground(Graphics g, JComponent c) {
HeaderBox headerBox = (HeaderBox) c;
Rectangle rect = new Rectangle(0, 0, c.getWidth(), c.getHeight());
if (headerBox.getModel().isPressed()) {
_painter.paintHeaderBoxBackground(c, g, rect, SwingConstants.HORIZONTAL, ThemePainter.STATE_PRESSED);
}
else if (headerBox.getModel().isSelected()) {
_painter.paintHeaderBoxBackground(c, g, rect, SwingConstants.HORIZONTAL, ThemePainter.STATE_SELECTED);
}
else if (headerBox.getModel().isRollover()) {
_painter.paintHeaderBoxBackground(c, g, rect, SwingConstants.HORIZONTAL, ThemePainter.STATE_ROLLOVER);
}
else {
_painter.paintHeaderBoxBackground(c, g, rect, SwingConstants.HORIZONTAL, ThemePainter.STATE_DEFAULT);
}
}
protected void uninstallDefaults(HeaderBox p) {
LookAndFeel.uninstallBorder(p);
_painter = null;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy