| /* |
| * Copyright 2000-2009 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.intellij.ui; |
| |
| import com.intellij.util.text.StringTokenizer; |
| import com.intellij.util.ui.UIUtil; |
| |
| import javax.swing.*; |
| import java.awt.*; |
| |
| /** |
| * @author Vladimir Kondratyev |
| */ |
| public class HorizontalLabeledIcon implements Icon { |
| private final Icon myIcon; |
| private final String[] myStrings; |
| private final String myMnemonic; |
| |
| /** |
| * @param icon not <code>null</code> icon. |
| * @param text to be painted under the <code>icon<code>. This parameter can |
| * be <code>null</code> if text isn't specified. In that case <code>LabeledIcon</code> |
| */ |
| public HorizontalLabeledIcon(Icon icon, String text, String mnemonic) { |
| myIcon = icon; |
| if (text != null) { |
| StringTokenizer tokenizer = new StringTokenizer(text, "\n"); |
| myStrings = new String[tokenizer.countTokens()]; |
| for (int i = 0; tokenizer.hasMoreTokens(); i++) { |
| myStrings[i] = tokenizer.nextToken(); |
| } |
| } |
| else { |
| myStrings = null; |
| } |
| myMnemonic = mnemonic; |
| } |
| |
| public int getIconHeight() { |
| return Math.max(myIcon.getIconHeight(), getTextHeight()); |
| } |
| |
| public int getIconWidth() { |
| return myIcon.getIconWidth() + getTextWidth() + 5; |
| } |
| |
| private int getTextHeight() { |
| if (myStrings != null) { |
| Font font = UIUtil.getLabelFont(); |
| FontMetrics fontMetrics = Toolkit.getDefaultToolkit().getFontMetrics(font); |
| return fontMetrics.getHeight() * myStrings.length; |
| } |
| else { |
| return 0; |
| } |
| } |
| |
| private int getTextWidth() { |
| if (myStrings != null) { |
| int width = 0; |
| Font font = UIUtil.getLabelFont(); |
| FontMetrics fontMetrics = Toolkit.getDefaultToolkit().getFontMetrics(font); |
| for (int i = 0; i < myStrings.length; i++) { |
| String string = myStrings[i]; |
| if (myMnemonic != null && i == myStrings.length-1) { |
| string += " "+myMnemonic; |
| } |
| width = Math.max(width, fontMetrics.stringWidth(string)); |
| } |
| |
| return width; |
| } |
| else { |
| return 0; |
| } |
| } |
| |
| public void paintIcon(Component c, Graphics g, int x, int y) { |
| // Draw icon |
| int height = getIconHeight(); |
| int iconHeight = myIcon.getIconHeight(); |
| if (height > iconHeight) { |
| myIcon.paintIcon(c, g, x, y + (height - iconHeight) / 2); |
| } |
| else { |
| myIcon.paintIcon(c, g, x, y); |
| } |
| |
| // Draw text |
| if (myStrings != null) { |
| Font font = UIUtil.getLabelFont(); |
| FontMetrics fontMetrics = Toolkit.getDefaultToolkit().getFontMetrics(font); |
| g.setFont(fontMetrics.getFont()); |
| g.setColor(UIUtil.getLabelForeground()); |
| |
| x += myIcon.getIconWidth() + 5; |
| y += (height - getTextHeight()) / 2 + fontMetrics.getHeight() - fontMetrics.getDescent(); |
| for (int i = 0; i < myStrings.length; i++) { |
| String string = myStrings[i]; |
| g.drawString(string, x, y); |
| y += fontMetrics.getHeight(); |
| } |
| if (myMnemonic != null) { |
| g.setColor(UIUtil.getInactiveTextColor()); |
| int offset = fontMetrics.stringWidth(myStrings[myStrings.length-1]+" "); |
| y -= fontMetrics.getHeight(); |
| g.drawString(myMnemonic, x + offset, y); |
| } |
| } |
| } |
| |
| } |