mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
GitBranchPopup: show current branch in footers of each root sub-popups.
PopupFactoryImpl: * extract the popup created in static methods as new public class ActionGroupPopup, so that it could be overridden; * make ActionItem public to access getActions. WizardPopup: make createPopup() non-static to override it.
This commit is contained in:
@@ -159,55 +159,81 @@ public class PopupFactoryImpl extends JBPopupFactory {
|
||||
final Runnable disposeCallback,
|
||||
final int maxRowCount,
|
||||
final Condition<AnAction> preselectActionCondition, @Nullable final String actionPlace) {
|
||||
final Component component = PlatformDataKeys.CONTEXT_COMPONENT.getData(dataContext);
|
||||
|
||||
final ActionStepBuilder builder = new ActionStepBuilder(dataContext, showNumbers, useAlphaAsNumbers, showDisabledActions, honorActionMnemonics);
|
||||
if (actionPlace != null) {
|
||||
builder.setActionPlace(actionPlace);
|
||||
}
|
||||
builder.buildGroup(actionGroup);
|
||||
final List<ActionItem> items = builder.getItems();
|
||||
|
||||
int defaultOptionIndex = 0;
|
||||
if (preselectActionCondition != null) {
|
||||
for (int i = 0; i < items.size(); i++) {
|
||||
final AnAction action = items.get(i).getAction();
|
||||
if (preselectActionCondition.value(action)) {
|
||||
defaultOptionIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ListPopupStep step = new ActionPopupStep(items, title, component, showNumbers || honorActionMnemonics && itemsHaveMnemonics(items),
|
||||
defaultOptionIndex,
|
||||
false, showDisabledActions);
|
||||
|
||||
final ListPopupImpl popup = new ListPopupImpl(step, maxRowCount) {
|
||||
public void dispose() {
|
||||
if (disposeCallback != null) {
|
||||
disposeCallback.run();
|
||||
}
|
||||
ActionMenu.showDescriptionInStatusBar(true, component, null);
|
||||
super.dispose();
|
||||
}
|
||||
};
|
||||
popup.addListSelectionListener(new ListSelectionListener(){
|
||||
public void valueChanged(ListSelectionEvent e) {
|
||||
final JList list = (JList)e.getSource();
|
||||
final ActionItem actionItem = (ActionItem)list.getSelectedValue();
|
||||
if (actionItem == null) return;
|
||||
AnAction action = actionItem.getAction();
|
||||
Presentation presentation = new Presentation();
|
||||
presentation.setDescription(action.getTemplatePresentation().getDescription());
|
||||
final String actualActionPlace = actionPlace == null ? ActionPlaces.UNKNOWN : actionPlace;
|
||||
action.update(new AnActionEvent(null, DataManager.getInstance().getDataContext(component), actualActionPlace, presentation,
|
||||
ActionManager.getInstance(), 0));
|
||||
ActionMenu.showDescriptionInStatusBar(true, component, presentation.getDescription());
|
||||
}
|
||||
});
|
||||
return popup;
|
||||
return new ActionGroupPopup(title, actionGroup, dataContext, showNumbers, useAlphaAsNumbers, showDisabledActions, honorActionMnemonics,
|
||||
disposeCallback, maxRowCount, preselectActionCondition, actionPlace);
|
||||
}
|
||||
|
||||
public static class ActionGroupPopup extends ListPopupImpl {
|
||||
|
||||
private final Runnable myDisposeCallback;
|
||||
private final Component myComponent;
|
||||
|
||||
public ActionGroupPopup(final String title, final ActionGroup actionGroup, @NotNull DataContext dataContext,
|
||||
boolean showNumbers, boolean useAlphaAsNumbers, boolean showDisabledActions, boolean honorActionMnemonics,
|
||||
final Runnable disposeCallback, final int maxRowCount, final Condition<AnAction> preselectActionCondition,
|
||||
@Nullable final String actionPlace) {
|
||||
super(createStep(title, actionGroup, dataContext, showNumbers, useAlphaAsNumbers, showDisabledActions, honorActionMnemonics,
|
||||
preselectActionCondition, actionPlace),
|
||||
maxRowCount);
|
||||
myDisposeCallback = disposeCallback;
|
||||
myComponent = PlatformDataKeys.CONTEXT_COMPONENT.getData(dataContext);
|
||||
|
||||
addListSelectionListener(new ListSelectionListener() {
|
||||
public void valueChanged(ListSelectionEvent e) {
|
||||
final JList list = (JList)e.getSource();
|
||||
final ActionItem actionItem = (ActionItem)list.getSelectedValue();
|
||||
if (actionItem == null) return;
|
||||
AnAction action = actionItem.getAction();
|
||||
Presentation presentation = new Presentation();
|
||||
presentation.setDescription(action.getTemplatePresentation().getDescription());
|
||||
final String actualActionPlace = actionPlace == null ? ActionPlaces.UNKNOWN : actionPlace;
|
||||
action.update(new AnActionEvent(null, DataManager.getInstance().getDataContext(myComponent), actualActionPlace, presentation,
|
||||
ActionManager.getInstance(), 0));
|
||||
ActionMenu.showDescriptionInStatusBar(true, myComponent, presentation.getDescription());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static ListPopupStep createStep(String title, ActionGroup actionGroup, @NotNull DataContext dataContext,
|
||||
boolean showNumbers, boolean useAlphaAsNumbers, boolean showDisabledActions,
|
||||
boolean honorActionMnemonics,
|
||||
Condition<AnAction> preselectActionCondition, @Nullable String actionPlace) {
|
||||
final Component component = PlatformDataKeys.CONTEXT_COMPONENT.getData(dataContext);
|
||||
|
||||
final ActionStepBuilder builder =
|
||||
new ActionStepBuilder(dataContext, showNumbers, useAlphaAsNumbers, showDisabledActions, honorActionMnemonics);
|
||||
if (actionPlace != null) {
|
||||
builder.setActionPlace(actionPlace);
|
||||
}
|
||||
builder.buildGroup(actionGroup);
|
||||
final List<ActionItem> items = builder.getItems();
|
||||
|
||||
int defaultOptionIndex = 0;
|
||||
if (preselectActionCondition != null) {
|
||||
for (int i = 0; i < items.size(); i++) {
|
||||
final AnAction action = items.get(i).getAction();
|
||||
if (preselectActionCondition.value(action)) {
|
||||
defaultOptionIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return new ActionPopupStep(items, title, component, showNumbers || honorActionMnemonics && itemsHaveMnemonics(items),
|
||||
defaultOptionIndex,
|
||||
false, showDisabledActions);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
if (myDisposeCallback != null) {
|
||||
myDisposeCallback.run();
|
||||
}
|
||||
ActionMenu.showDescriptionInStatusBar(true, myComponent, null);
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
public ListPopup createActionGroupPopup(final String title,
|
||||
final ActionGroup actionGroup,
|
||||
@NotNull DataContext dataContext,
|
||||
@@ -410,7 +436,7 @@ public class PopupFactoryImpl extends JBPopupFactory {
|
||||
return AbstractPopup.getCenterOf(container, content);
|
||||
}
|
||||
|
||||
private static class ActionItem {
|
||||
public static class ActionItem {
|
||||
private final AnAction myAction;
|
||||
private final String myText;
|
||||
private final boolean myIsEnabled;
|
||||
|
||||
@@ -362,7 +362,7 @@ public abstract class WizardPopup extends AbstractPopup implements ActionListene
|
||||
return new Rectangle(getContent().getLocationOnScreen(), getContent().getSize());
|
||||
}
|
||||
|
||||
protected static WizardPopup createPopup(WizardPopup parent, PopupStep step, Object parentValue) {
|
||||
protected WizardPopup createPopup(WizardPopup parent, PopupStep step, Object parentValue) {
|
||||
if (step instanceof ListPopupStep) {
|
||||
return new ListPopupImpl(parent, (ListPopupStep)step, parentValue);
|
||||
}
|
||||
|
||||
@@ -25,9 +25,11 @@ import com.intellij.openapi.actionSystem.DefaultActionGroup;
|
||||
import com.intellij.openapi.actionSystem.impl.SimpleDataContext;
|
||||
import com.intellij.openapi.options.ShowSettingsUtil;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.popup.JBPopupFactory;
|
||||
import com.intellij.openapi.ui.popup.ListPopup;
|
||||
import com.intellij.openapi.ui.popup.PopupStep;
|
||||
import com.intellij.openapi.util.IconLoader;
|
||||
import com.intellij.ui.popup.PopupFactoryImpl;
|
||||
import com.intellij.ui.popup.WizardPopup;
|
||||
import com.intellij.ui.popup.list.ListPopupImpl;
|
||||
import git4idea.GitVcs;
|
||||
import git4idea.config.GitVcsSettings;
|
||||
@@ -86,10 +88,22 @@ class GitBranchPopup {
|
||||
|
||||
String title = createPopupTitle(currentRepository);
|
||||
|
||||
myPopup = (ListPopupImpl) JBPopupFactory.getInstance().createActionGroupPopup(
|
||||
myPopup = new PopupFactoryImpl.ActionGroupPopup(
|
||||
title, createActions(),
|
||||
SimpleDataContext.getProjectContext(project),
|
||||
JBPopupFactory.ActionSelectionAid.SPEEDSEARCH, true);
|
||||
false, false, false, true, null, -1, null, null) {
|
||||
@Override
|
||||
protected WizardPopup createPopup(WizardPopup parent, PopupStep step, Object parentValue) {
|
||||
WizardPopup popup = super.createPopup(parent, step, parentValue);
|
||||
if (parentValue instanceof PopupFactoryImpl.ActionItem) {
|
||||
AnAction action = ((PopupFactoryImpl.ActionItem)parentValue).getAction();
|
||||
if (action instanceof RootAction) {
|
||||
popup.setAdText(((RootAction)action).getCaption());
|
||||
}
|
||||
}
|
||||
return popup;
|
||||
}
|
||||
};
|
||||
|
||||
initBranchSyncPolicyIfNotInitialized();
|
||||
setCurrentBranchInfo();
|
||||
@@ -243,6 +257,11 @@ class GitBranchPopup {
|
||||
return group.getChildren(e);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String getCaption() {
|
||||
return "Current branch in " + GitUIUtil.getShortRepositoryName(myRepository) + ": " +
|
||||
GitBranchUiUtil.getDisplayableBranchText(myRepository);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user