帆软报表设计器源代码。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

178 lines
6.8 KiB

package com.fr.design.gui.ibutton;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import javax.swing.AbstractButton;
import javax.swing.ButtonModel;
import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.SwingUtilities;
import javax.swing.plaf.basic.BasicButtonUI;
import javax.swing.plaf.basic.BasicHTML;
import javax.swing.text.View;
import com.fr.design.constants.UIConstants;
import com.fr.design.roleAuthority.ReportAndFSManagePane;
import sun.swing.SwingUtilities2;
import com.fr.stable.StringUtils;
import com.fr.design.utils.gui.GUIPaintUtils;
public class UIButtonUI extends BasicButtonUI {
private Rectangle viewRec = new Rectangle();
private Rectangle textRec = new Rectangle();
private Rectangle iconRec = new Rectangle();
@Override
public void paint(Graphics g, JComponent c) {
UIButton b = (UIButton) c;
Graphics2D g2d = (Graphics2D) g;
int w = b.getWidth();
int h = b.getHeight();
String text = initRecAndGetText(b, SwingUtilities2.getFontMetrics(b, g), b.getWidth(), b.getHeight());
String selectedRoles = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName();
clearTextShiftOffset();
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
if (b.isExtraPainted()) {
doExtraPainting(b, g2d, w, h, selectedRoles);
}
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
paintContent(g, b, text);
}
protected void doExtraPainting(UIButton b, Graphics2D g2d, int w, int h, String selectedRoles) {
if (isPressed(b) && b.isPressedPainted()) {
GUIPaintUtils.fillPressed(g2d, 0, 0, w, h, b.isRoundBorder(), b.getRectDirection(), b.isDoneAuthorityEdited(selectedRoles));
} else if (isRollOver(b)) {
GUIPaintUtils.fillRollOver(g2d, 0, 0, w, h, b.isRoundBorder(), b.getRectDirection(), b.isDoneAuthorityEdited(selectedRoles), b.isPressedPainted());
} else if (b.isNormalPainted()) {
GUIPaintUtils.fillNormal(g2d, 0, 0, w, h, b.isRoundBorder(), b.getRectDirection(), b.isDoneAuthorityEdited(selectedRoles), b.isPressedPainted());
}
}
protected boolean isRollOver(AbstractButton b) {
ButtonModel model = b.getModel();
return model.isRollover() && !b.isSelected();
}
protected boolean isPressed(AbstractButton b) {
ButtonModel model = b.getModel();
return (model.isArmed() && model.isPressed()) || b.isSelected();
}
private void paintContent(Graphics g, AbstractButton b, String text) {
if (b.getIcon() != null) {
paintIcon(g, b);
}
if (!StringUtils.isEmpty(text)) {
paintText(g, b, text);
}
}
private void paintText(Graphics g, AbstractButton b, String text) {
View v = (View) b.getClientProperty(BasicHTML.propertyKey);
if (v != null) {
v.paint(g, textRec);
return;
}
FontMetrics fm = SwingUtilities2.getFontMetrics(b, g);
int mnemonicIndex = b.getDisplayedMnemonicIndex();
if (b.isEnabled()) {
g.setColor(UIConstants.FONT_COLOR);
} else {
g.setColor(UIConstants.LINE_COLOR);
}
SwingUtilities2.drawStringUnderlineCharAt(b, g, text, mnemonicIndex, textRec.x + getTextShiftOffset(), textRec.y + fm.getAscent() + getTextShiftOffset());
}
private String initRecAndGetText(AbstractButton b, FontMetrics fm, int width, int height) {
Insets i = b.getInsets();
viewRec.x = i.left;
viewRec.y = i.top;
viewRec.width = width - (i.right + viewRec.x);
viewRec.height = height - (i.bottom + viewRec.y);
textRec.x = textRec.y = textRec.width = textRec.height = 0;
iconRec.x = iconRec.y = iconRec.width = iconRec.height = 0;
// layout the text and icon
return SwingUtilities.layoutCompoundLabel(
b, fm, b.getText(), b.getIcon(),
b.getVerticalAlignment(), b.getHorizontalAlignment(),
b.getVerticalTextPosition(), b.getHorizontalTextPosition(),
viewRec, iconRec, textRec,
b.getText() == null ? 0 : b.getIconTextGap());
}
protected void paintBorder(Graphics g, UIButton b) {
String selectedRoles = ReportAndFSManagePane.getInstance().getRoleTree().getSelectedRoleName();
GUIPaintUtils.drawBorder((Graphics2D) g, 0, 0, b.getWidth(), b.getHeight(), b.isRoundBorder(), b.getRectDirection(), b.isDoneAuthorityEdited(selectedRoles));
}
protected void paintIcon(Graphics g, JComponent c) {
AbstractButton b = (AbstractButton) c;
ButtonModel model = b.getModel();
Icon icon = b.getIcon();
Icon tmpIcon = null;
if (icon == null) {
return;
}
Icon selectedIcon = null;
/* the fallback icon should be based on the selected state */
if (model.isSelected()) {
selectedIcon = (Icon) b.getSelectedIcon();
if (selectedIcon != null) {
icon = selectedIcon;
}
}
if (!model.isEnabled()) {
if (model.isSelected()) {
tmpIcon = (Icon) b.getDisabledSelectedIcon();
if (tmpIcon == null) {
tmpIcon = selectedIcon;
}
}
if (tmpIcon == null) {
tmpIcon = (Icon) b.getDisabledIcon();
}
} else if (model.isPressed() && model.isArmed()) {
tmpIcon = (Icon) b.getPressedIcon();
if (tmpIcon != null) {
// revert back to 0 offset
clearTextShiftOffset();
}
} else if (b.isRolloverEnabled() && model.isRollover()) {
if (model.isSelected()) {
tmpIcon = (Icon) b.getRolloverSelectedIcon();
if (tmpIcon == null) {
tmpIcon = selectedIcon;
}
}
if (tmpIcon == null) {
tmpIcon = (Icon) b.getRolloverIcon();
}
}
if (tmpIcon != null) {
icon = tmpIcon;
}
paintModelIcon(model, icon, g, c);
}
private void paintModelIcon(ButtonModel model, Icon icon, Graphics g, JComponent c) {
if (model.isPressed() && model.isArmed()) {
icon.paintIcon(c, g, iconRec.x + getTextShiftOffset(),
iconRec.y + getTextShiftOffset());
} else {
icon.paintIcon(c, g, iconRec.x, iconRec.y);
}
}
}