diff options
Diffstat (limited to 'platform/dvcs-impl/src/com/intellij/dvcs/ui/BranchActionGroupPopup.java')
-rw-r--r-- | platform/dvcs-impl/src/com/intellij/dvcs/ui/BranchActionGroupPopup.java | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/ui/BranchActionGroupPopup.java b/platform/dvcs-impl/src/com/intellij/dvcs/ui/BranchActionGroupPopup.java new file mode 100644 index 000000000000..44b4c8c5c3f0 --- /dev/null +++ b/platform/dvcs-impl/src/com/intellij/dvcs/ui/BranchActionGroupPopup.java @@ -0,0 +1,114 @@ +/* + * 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); + } + }; + } +} + |