| |
| /* |
| * 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.plaf.beg; |
| |
| import com.intellij.util.ui.UIUtil; |
| |
| import javax.swing.*; |
| import javax.swing.plaf.metal.MetalComboBoxButton; |
| import javax.swing.plaf.metal.MetalLookAndFeel; |
| import java.awt.*; |
| |
| public class BegComboBoxButton extends MetalComboBoxButton { |
| public BegComboBoxButton(JComboBox cb, Icon i, boolean onlyIcon, CellRendererPane pane, JList list) { |
| super(cb, i, onlyIcon, pane, list); |
| } |
| |
| public BegComboBoxButton(JComboBox cb, Icon i, CellRendererPane pane, JList list) { |
| super(cb, i, pane, list); |
| } |
| |
| /* |
| protected JComboBox comboBox; |
| protected JList listBox; |
| protected CellRendererPane rendererPane; |
| protected Icon comboIcon; |
| protected boolean iconOnly = false; |
| |
| public final JComboBox getComboBox() { return comboBox;} |
| public final void setComboBox( JComboBox cb ) { comboBox = cb;} |
| |
| public final Icon getComboIcon() { return comboIcon;} |
| public final void setComboIcon( Icon i ) { comboIcon = i;} |
| |
| public final boolean isIconOnly() { return iconOnly;} |
| public final void setIconOnly( boolean isIconOnly ) { iconOnly = isIconOnly;} |
| |
| BegComboBoxButton() { |
| super( "" ); |
| DefaultButtonModel model = new DefaultButtonModel() { |
| public void setArmed( boolean armed ) { |
| super.setArmed( isPressed() ? true : armed ); |
| } |
| }; |
| |
| setModel( model ); |
| } |
| |
| public BegComboBoxButton( JComboBox cb, Icon i, |
| CellRendererPane pane, JList list ) { |
| this(); |
| comboBox = cb; |
| comboIcon = i; |
| rendererPane = pane; |
| listBox = list; |
| setEnabled( comboBox.isEnabled() ); |
| setRequestFocusEnabled( comboBox.isEnabled() ); |
| } |
| |
| public BegComboBoxButton( JComboBox cb, Icon i, boolean onlyIcon, |
| CellRendererPane pane, JList list ) { |
| this( cb, i, pane, list ); |
| iconOnly = onlyIcon; |
| } |
| |
| public boolean isFocusTraversable() { |
| return (!comboBox.isEditable()) && comboBox.isEnabled(); |
| } |
| */ |
| |
| public void paintComponent(Graphics g) { |
| boolean leftToRight = comboBox.getComponentOrientation().isLeftToRight(); |
| |
| // Paint the button as usual |
| if (comboBox.isEditable()){ |
| super.paintComponent(g); |
| } |
| else{ |
| if (getModel().isPressed()){ |
| Color selectColor = UIUtil.getButtonSelectColor(); |
| g.setColor(selectColor); |
| } |
| else{ |
| g.setColor(getBackground()); |
| } |
| Dimension size = getSize(); |
| g.fillRect(0, 0, size.width, size.height); |
| } |
| |
| Insets insets = getInsets(); |
| |
| int width = getWidth() - (insets.left + insets.right); |
| int height = getHeight() - (insets.top + insets.bottom); |
| |
| if (height <= 0 || width <= 0){ |
| return; |
| } |
| |
| int left = insets.left; |
| int top = insets.top; |
| int bottom = top + (height - 1); |
| |
| int iconWidth = 0; |
| |
| // Paint the icon |
| if (comboIcon != null){ |
| iconWidth = comboIcon.getIconWidth(); |
| int iconHeight = comboIcon.getIconHeight(); |
| |
| int iconTop; |
| int iconLeft; |
| if (iconOnly){ |
| iconLeft = (getWidth() / 2) - (iconWidth / 2); |
| iconTop = (getHeight() / 2) - (iconHeight / 2); |
| } |
| else{ |
| if (leftToRight){ |
| iconLeft = (left + (width - 1)) - iconWidth; |
| } |
| else{ |
| iconLeft = left; |
| } |
| iconTop = (top + ((bottom - top) / 2)) - (iconHeight / 2); |
| } |
| |
| comboIcon.paintIcon(this, g, iconLeft, iconTop); |
| |
| // Paint the focus |
| if (comboBox.hasFocus()){ |
| g.setColor(MetalLookAndFeel.getFocusColor()); |
| // g.drawRect( left - 1, top - 1, width + 3, height + 1 ); |
| UIUtil.drawDottedRectangle(g, left - 1, top - 1, left + width, top + height); |
| } |
| } |
| |
| // Let the renderer paint |
| if (!iconOnly && comboBox != null){ |
| ListCellRenderer renderer = comboBox.getRenderer(); |
| Component c; |
| boolean renderPressed = getModel().isPressed(); |
| c = renderer.getListCellRendererComponent(listBox, |
| comboBox.getSelectedItem(), |
| -1, |
| renderPressed, |
| false); |
| c.setFont(rendererPane.getFont()); |
| |
| if (model.isArmed() && model.isPressed()){ |
| if (isOpaque()){ |
| c.setBackground(UIUtil.getButtonSelectColor()); |
| } |
| c.setForeground(comboBox.getForeground()); |
| } |
| else |
| if (!comboBox.isEnabled()){ |
| if (isOpaque()){ |
| c.setBackground(UIUtil.getComboBoxDisabledBackground()); |
| } |
| c.setForeground(UIUtil.getComboBoxDisabledForeground()); |
| } |
| else{ |
| // c.setForeground(comboBox.getForeground()); |
| // c.setBackground(comboBox.getBackground()); |
| } |
| |
| |
| int cWidth = width - (insets.right + iconWidth); |
| if (leftToRight){ |
| rendererPane.paintComponent(g, c, this, |
| left, top, cWidth, height); |
| } |
| else{ |
| rendererPane.paintComponent(g, c, this, |
| left + iconWidth, top, cWidth, height); |
| } |
| } |
| } |
| |
| } |