made all fields final. Could not resist, sorry
[fedora-idea.git] / platform-impl / src / com / intellij / ui / LabeledIcon.java
blob8af8970769eabb73db15dae180658ef44b816fa1
1 package com.intellij.ui;
3 import com.intellij.util.text.StringTokenizer;
4 import com.intellij.util.ui.UIUtil;
6 import javax.swing.*;
7 import java.awt.*;
9 /**
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;
18 /**
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>
22 * @param mnemonic
24 public LabeledIcon(Icon icon, String text, String mnemonic) {
25 myIcon = icon;
26 myMnemonic = mnemonic;
27 if (text != null) {
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();
34 else {
35 myStrings = null;
39 public void setIconTextGap(int iconTextGap) {
40 myIconTextGap = iconTextGap;
43 public int getIconTextGap() {
44 return myIconTextGap;
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;
61 else {
62 return 0;
66 private int getTextWidth() {
67 if (myStrings != null) {
68 int width = 0;
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);
78 return width;
80 else {
81 return 0;
85 public void paintIcon(Component c, Graphics g, int x, int y) {
86 // Draw icon
87 int width = getIconWidth();
88 int iconWidth = myIcon.getIconWidth();
89 if (width > iconWidth) {
90 myIcon.paintIcon(c, g, x + (width - iconWidth) / 2, y);
92 else {
93 myIcon.paintIcon(c, g, x, y);
95 // Draw text
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);