blob: 44b4c8c5c3f097f69bcd01f1a196a72c89b9f7a2 [file] [log] [blame]
/*
* Copyright 2000-2013 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.dvcs.ui;
import com.intellij.openapi.actionSystem.ActionGroup;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.impl.SimpleDataContext;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.popup.PopupStep;
import com.intellij.openapi.util.Condition;
import com.intellij.ui.ErrorLabel;
import com.intellij.ui.JBColor;
import com.intellij.ui.components.panels.OpaquePanel;
import com.intellij.ui.popup.PopupFactoryImpl;
import com.intellij.ui.popup.WizardPopup;
import com.intellij.ui.popup.list.PopupListElementRenderer;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
public class BranchActionGroupPopup extends PopupFactoryImpl.ActionGroupPopup {
public BranchActionGroupPopup(@NotNull String title, @NotNull Project project,
@NotNull Condition<AnAction> preselectActionCondition, @NotNull ActionGroup actions) {
super(title, actions, SimpleDataContext.getProjectContext(project), false, false, true, false, null, -1,
preselectActionCondition, null);
}
@Override
protected WizardPopup createPopup(WizardPopup parent, PopupStep step, Object parentValue) {
WizardPopup popup = super.createPopup(parent, step, parentValue);
RootAction rootAction = getRootAction(parentValue);
if (rootAction != null) {
popup.setAdText((rootAction).getCaption());
}
return popup;
}
@Nullable
private static RootAction getRootAction(Object value) {
if (value instanceof PopupFactoryImpl.ActionItem) {
AnAction action = ((PopupFactoryImpl.ActionItem)value).getAction();
if (action instanceof RootAction) {
return (RootAction)action;
}
}
return null;
}
@Override
protected ListCellRenderer getListElementRenderer() {
return new PopupListElementRenderer(this) {
private ErrorLabel myBranchLabel;
@Override
protected void customizeComponent(JList list, Object value, boolean isSelected) {
super.customizeComponent(list, value, isSelected);
RootAction rootAction = getRootAction(value);
if (rootAction != null) {
myBranchLabel.setVisible(true);
myBranchLabel.setText(String.format("[%s]", rootAction.getDisplayableBranchText()));
if (isSelected) {
setSelected(myBranchLabel);
}
else {
myBranchLabel.setBackground(getBackground());
myBranchLabel.setForeground(JBColor.GRAY); // different foreground than for other elements
}
adjustOpacity(myBranchLabel, isSelected);
}
else {
myBranchLabel.setVisible(false);
}
}
@Override
protected JComponent createItemComponent() {
myTextLabel = new ErrorLabel();
myTextLabel.setOpaque(true);
myTextLabel.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
myBranchLabel = new ErrorLabel();
myBranchLabel.setOpaque(true);
myBranchLabel.setBorder(BorderFactory.createEmptyBorder(1, UIUtil.DEFAULT_HGAP, 1, 1));
JPanel compoundPanel = new OpaquePanel(new BorderLayout(), JBColor.WHITE);
compoundPanel.add(myTextLabel, BorderLayout.CENTER);
compoundPanel.add(myBranchLabel, BorderLayout.EAST);
return layoutComponent(compoundPanel);
}
};
}
}