JSeparator jsep = new JSeparator(JSeparator.VERTICAL);
int layoutHGap = 2 * FlamingoUtilities.getHLayoutGap(commandButton);
int layoutVGap = 2 * FlamingoUtilities.getVLayoutGap(commandButton);
ResizableIcon buttonIcon = commandButton.getIcon();
boolean ltr = commandButton.getComponentOrientation().isLeftToRight();
if (ltr) {
int x = ins.left;
// medium icon, 1-line text, 1-line extra text and action arrow
result.iconRect.x = x;
result.iconRect.y = ins.top + layoutVGap;
result.iconRect.width = buttonIcon.getIconWidth();
result.iconRect.height = buttonIcon.getIconHeight();
x += buttonIcon.getIconWidth();
if (buttonKind == JCommandButton.CommandButtonKind.ACTION_AND_POPUP_MAIN_POPUP) {
result.actionClickArea.x = 0;
result.actionClickArea.y = 0;
result.actionClickArea.width = x + layoutHGap;
result.actionClickArea.height = height;
result.popupClickArea.x = x + layoutHGap;
result.popupClickArea.y = 0;
result.popupClickArea.width = width - x - layoutHGap;
result.popupClickArea.height = height;
result.separatorOrientation = CommandButtonSeparatorOrientation.VERTICAL;
result.separatorArea = new Rectangle();
result.separatorArea.x = x + layoutHGap;
result.separatorArea.y = 0;
result.separatorArea.width = new JSeparator(JSeparator.VERTICAL)
.getPreferredSize().width;
result.separatorArea.height = height;
result.isTextInActionArea = false;
}
x += 2 * layoutHGap + jsep.getPreferredSize().width;
TextLayoutInfo lineLayoutInfo = new TextLayoutInfo();
lineLayoutInfo.text = commandButton.getText();
lineLayoutInfo.textRect = new Rectangle();
lineLayoutInfo.textRect.x = x;
lineLayoutInfo.textRect.y = ins.top + layoutVGap / 2;
lineLayoutInfo.textRect.width = fm.stringWidth(commandButton
.getText());
lineLayoutInfo.textRect.height = labelHeight;
result.textLayoutInfoList = new ArrayList<TextLayoutInfo>();
result.textLayoutInfoList.add(lineLayoutInfo);
String extraText = commandButton.getExtraText();
if ((extraText == null) || (extraText.length() == 0)) {
lineLayoutInfo.textRect.y = (height - labelHeight) / 2;
} else {
AttributedString attributedDescription = new AttributedString(
commandButton.getExtraText());
attributedDescription.addAttribute(TextAttribute.FONT, g
.getFont());
LineBreakMeasurer lineBreakMeasurer = new LineBreakMeasurer(
attributedDescription.getIterator(), ((Graphics2D) g)
.getFontRenderContext());
// The max width of the extra text line - need to leave
// space for the popup arrow icon
int maxFirstExtraLineWidth = width - x - ins.right - layoutHGap
- labelHeight;
int breakIndex = lineBreakMeasurer
.nextOffset(maxFirstExtraLineWidth);
TextLayoutInfo extraLineLayoutInfo1 = new TextLayoutInfo();
extraLineLayoutInfo1.text = commandButton.getExtraText()
.substring(0, breakIndex);
extraLineLayoutInfo1.textRect = new Rectangle();
extraLineLayoutInfo1.textRect.x = x;
extraLineLayoutInfo1.textRect.y = ins.top + layoutVGap
+ labelHeight;
extraLineLayoutInfo1.textRect.width = fm
.stringWidth(extraLineLayoutInfo1.text);
extraLineLayoutInfo1.textRect.height = labelHeight;
TextLayoutInfo extraLineLayoutInfo2 = new TextLayoutInfo();
extraLineLayoutInfo2.text = commandButton.getExtraText()
.substring(breakIndex);
extraLineLayoutInfo2.textRect = new Rectangle();
extraLineLayoutInfo2.textRect.x = x;
extraLineLayoutInfo2.textRect.y = ins.top + layoutVGap + 2
* labelHeight;
extraLineLayoutInfo2.textRect.width = fm
.stringWidth(extraLineLayoutInfo2.text);
extraLineLayoutInfo2.textRect.height = labelHeight;
result.extraTextLayoutInfoList = new ArrayList<TextLayoutInfo>();
result.extraTextLayoutInfoList.add(extraLineLayoutInfo1);
result.extraTextLayoutInfoList.add(extraLineLayoutInfo2);
}
x += fm.getStringBounds(commandButton.getText(), g).getWidth();
if (buttonKind == JCommandButton.CommandButtonKind.ACTION_AND_POPUP_MAIN_ACTION) {
// popup click areas are right aligned
result.actionClickArea.x = 0;
result.actionClickArea.y = 0;
result.actionClickArea.width = width - ins.right - labelHeight;
result.actionClickArea.height = height;
result.popupClickArea.x = width - ins.right - labelHeight;
result.popupClickArea.y = 0;
result.popupClickArea.width = labelHeight + ins.right;
result.popupClickArea.height = height;
result.separatorOrientation = CommandButtonSeparatorOrientation.VERTICAL;
result.separatorArea = new Rectangle();
result.separatorArea.x = width - ins.right - labelHeight;
result.separatorArea.y = 0;
result.separatorArea.width = new JSeparator(JSeparator.VERTICAL)
.getPreferredSize().width;
result.separatorArea.height = height;
result.isTextInActionArea = true;
}
if (FlamingoUtilities.hasPopupAction(commandButton)) {
result.popupActionRect.x = width - ins.right - labelHeight * 3
/ 4;
result.popupActionRect.y = (height - labelHeight) / 2 - 1;
result.popupActionRect.width = 1 + labelHeight / 2;
result.popupActionRect.height = labelHeight + 2;
}
} else {
int x = commandButton.getWidth() - ins.right;
// medium icon, 1-line text, 1-line extra text and action arrow
result.iconRect.x = x - buttonIcon.getIconWidth();
result.iconRect.y = ins.top + layoutVGap;
result.iconRect.width = buttonIcon.getIconWidth();
result.iconRect.height = buttonIcon.getIconHeight();
x -= buttonIcon.getIconWidth();
if (buttonKind == JCommandButton.CommandButtonKind.ACTION_AND_POPUP_MAIN_POPUP) {
result.actionClickArea.x = x + layoutHGap;
result.actionClickArea.y = 0;
result.actionClickArea.width = width - x - layoutHGap;
result.actionClickArea.height = height;