blob: 884bfe1ab9a75dde4620ec8c07c6c30158238129 [file] [log] [blame]
/*
* Copyright 2000-2012 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.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.awt.event.MouseEvent;
/**
* @author max
*/
public class CaptionPanel extends JPanel {
private static final Color CNT_COLOR = new JBColor(Gray._240, Gray._90);
private static final Color BND_COLOR = new JBColor(Gray._240, Gray._90);
public static final Color CNT_ACTIVE_COLOR = new JBColor(Gray._202, Gray._55);
public static final Color CNT_ACTIVE_BORDER_COLOR = UIUtil.isUnderDarcula() ? UIUtil.getBorderColor() : CNT_ACTIVE_COLOR;
public static final Color BND_ACTIVE_COLOR = new JBColor(Gray._239, Gray._90);
private static final JBColor TOP_FLICK_ACTIVE = new JBColor(Color.white, Gray._110);
private static final JBColor TOP_FLICK_PASSIVE = new JBColor(Color.white, BND_COLOR);
private static final JBColor BOTTOM_FLICK_ACTIVE = new JBColor(Color.gray, Gray._35);
private static final JBColor BOTTOM_FLICK_PASSIVE = new JBColor(Color.lightGray, Gray._75);
private boolean myActive = false;
private ActiveComponent myButtonComponent;
private JComponent mySettingComponent;
public CaptionPanel() {
setLayout(new BorderLayout());
setBorder(new EmptyBorder(0, 4, 0, 4));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
final Graphics2D g2d = (Graphics2D) g;
/*
if (UIUtil.isUnderDarcula() && UIUtil.findComponentsOfType(this, JCheckBox.class).isEmpty()) {
paintUnderDarcula(g2d);
return;
}
*/
if (myActive) {
g.setColor(TOP_FLICK_ACTIVE);
g.drawLine(0, 0, getWidth(), 0);
g.setColor(BOTTOM_FLICK_ACTIVE);
g.drawLine(0, getHeight() - 1, getWidth(), getHeight() - 1);
g2d.setPaint(UIUtil.getGradientPaint(0, 0, BND_ACTIVE_COLOR, 0, getHeight(), CNT_ACTIVE_COLOR));
}
else {
g.setColor(TOP_FLICK_PASSIVE);
g.drawLine(0, 0, getWidth(), 0);
g.setColor(BOTTOM_FLICK_PASSIVE);
g.drawLine(0, getHeight() - 1, getWidth(), getHeight() - 1);
g2d.setPaint(UIUtil.getGradientPaint(0, 0, BND_COLOR, 0, getHeight(), CNT_COLOR));
}
g2d.fillRect(0, 1, getWidth(), getHeight() - 2);
}
private void paintUnderDarcula(Graphics2D g) {
if (myActive) {
g.setColor(Gray._100);
g.drawLine(0, 0, getWidth(), 0);
g.setColor(Gray._50);
g.drawLine(0, getHeight() - 1, getWidth(), getHeight() - 1);
g.setPaint(UIUtil.getGradientPaint(0, 0, Gray._100, 0, getHeight(), Gray._85));
}
else {
g.setColor(Gray._100);
g.drawLine(0, 0, getWidth(), 0);
g.setColor(Gray._50);
g.drawLine(0, getHeight() - 1, getWidth(), getHeight() - 1);
g.setPaint(UIUtil.getGradientPaint(0, 0, Gray._120, 0, getHeight(), Gray._105));
}
g.fillRect(0, 1, getWidth(), getHeight() - 2);
}
public void setActive(final boolean active) {
myActive = active;
if (myButtonComponent != null) {
myButtonComponent.setActive(active);
}
repaint();
}
public void setButtonComponent(@NotNull ActiveComponent component) {
if (myButtonComponent != null) {
remove(myButtonComponent.getComponent());
}
JPanel panel = new JPanel(new BorderLayout());
panel.add(new JLabel(" "), BorderLayout.WEST);
panel.add(component.getComponent(), BorderLayout.CENTER);
panel.setOpaque(false);
add(panel, BorderLayout.EAST);
myButtonComponent = component;
}
public void addSettingsComponent(Component component) {
if (mySettingComponent == null) {
mySettingComponent = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
mySettingComponent.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
add(mySettingComponent, BorderLayout.WEST);
mySettingComponent.setOpaque(false);
}
mySettingComponent.add(component);
}
public boolean isWithinPanel(MouseEvent e) {
final Point p = SwingUtilities.convertPoint(e.getComponent(), e.getX(), e.getY(), this);
final Component c = findComponentAt(p);
return c != null && c != myButtonComponent;
}
public static Color getBorderColor(boolean isActive) {
return isActive ? Color.gray : Color.lightGray;
}
}