1 package com
.intellij
.ui
;
3 import com
.intellij
.util
.text
.StringTokenizer
;
4 import com
.intellij
.util
.ui
.UIUtil
;
10 * @author Vladimir Kondratyev
12 public class LabeledIcon
implements Icon
{
13 private final Icon myIcon
;
14 private final String myMnemonic
;
15 private final String
[] myStrings
;
16 private int myIconTextGap
= 0;
19 * @param icon not <code>null</code> icon.
20 * @param text to be painted under the <code>icon<code>. This parameter can
21 * be <code>null</code> if text isn't specified. In that case <code>LabeledIcon</code>
24 public LabeledIcon(Icon icon
, String text
, String mnemonic
) {
26 myMnemonic
= mnemonic
;
28 StringTokenizer tokenizer
= new StringTokenizer(text
, "\n");
29 myStrings
= new String
[tokenizer
.countTokens()];
30 for (int i
= 0; tokenizer
.hasMoreTokens(); i
++) {
31 myStrings
[i
] = tokenizer
.nextToken();
39 public void setIconTextGap(int iconTextGap
) {
40 myIconTextGap
= iconTextGap
;
43 public int getIconTextGap() {
47 public int getIconHeight() {
48 return myIcon
.getIconHeight() + getTextHeight() + myIconTextGap
;
51 public int getIconWidth() {
52 return Math
.max(myIcon
.getIconWidth(), getTextWidth());
55 private int getTextHeight() {
56 if (myStrings
!= null) {
57 Font font
= UIUtil
.getLabelFont();
58 FontMetrics fontMetrics
= Toolkit
.getDefaultToolkit().getFontMetrics(font
);
59 return fontMetrics
.getHeight() * myStrings
.length
;
66 private int getTextWidth() {
67 if (myStrings
!= null) {
69 Font font
= UIUtil
.getLabelFont();
70 FontMetrics fontMetrics
= Toolkit
.getDefaultToolkit().getFontMetrics(font
);
71 for (String string
: myStrings
) {
72 width
= fontMetrics
.stringWidth(string
);
75 if (myMnemonic
!= null) {
76 width
+= fontMetrics
.stringWidth(myMnemonic
);
85 public void paintIcon(Component c
, Graphics g
, int x
, int y
) {
87 int width
= getIconWidth();
88 int iconWidth
= myIcon
.getIconWidth();
89 if (width
> iconWidth
) {
90 myIcon
.paintIcon(c
, g
, x
+ (width
- iconWidth
) / 2, y
);
93 myIcon
.paintIcon(c
, g
, x
, y
);
96 if (myStrings
!= null) {
97 Font font
= UIUtil
.getLabelFont();
98 FontMetrics fontMetrics
= Toolkit
.getDefaultToolkit().getFontMetrics(font
);
99 g
.setFont(fontMetrics
.getFont());
100 if (myMnemonic
!= null) {
101 width
-= fontMetrics
.stringWidth(myMnemonic
);
103 g
.setColor(UIUtil
.getLabelForeground());
104 y
+= myIcon
.getIconHeight() + fontMetrics
.getMaxAscent() + myIconTextGap
;
105 for (String string
: myStrings
) {
106 g
.drawString(string
, x
+ (width
- fontMetrics
.stringWidth(string
)) / 2, y
);
107 y
+= fontMetrics
.getHeight();
110 if (myMnemonic
!= null) {
111 y
-= fontMetrics
.getHeight();
112 g
.setColor(UIUtil
.getTextInactiveTextColor());
113 int offset
= getTextWidth() - fontMetrics
.stringWidth(myMnemonic
);
114 g
.drawString(myMnemonic
, x
+ offset
, y
);