All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.intellij.ui.plaf.beg.BegComboBoxButton Maven / Gradle / Ivy

Go to download

A packaging of the IntelliJ Community Edition platform-impl library. This is release number 1 of trunk branch 142.

The newest version!

/*
 * 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);
      }
    }
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy