[vcs] PAT-147 Use the first enabled push action as the main action.

GitOrigin-RevId: 86494170b0333e42de12206163504369668ab52a
This commit is contained in:
Piotr Tomiak
2025-10-23 15:35:10 +00:00
committed by intellij-monorepo-bot
parent 06d428e1ba
commit 4cd47d7fed
@@ -22,6 +22,7 @@ import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.ui.OptionAction;
import com.intellij.openapi.ui.ValidationInfo;
import com.intellij.ui.components.JBOptionButton;
import com.intellij.util.concurrency.annotations.RequiresEdt;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.JBDimension;
@@ -85,7 +86,7 @@ public class VcsPushDialog extends DialogWrapper implements VcsPushUi, UiDataPro
myTopPanel = myController.createTopPanel();
myPushActions = collectPushActions();
myMainAction = new ComplexPushAction(myPushActions.get(0), myPushActions.subList(1, myPushActions.size()));
myMainAction = new ComplexPushAction(myPushActions.subList(0, myPushActions.size()));
myMainAction.putValue(DEFAULT_ACTION, Boolean.TRUE);
myController.startLoadingCommits();
@@ -343,10 +344,15 @@ public class VcsPushDialog extends DialogWrapper implements VcsPushUi, UiDataPro
}
public void updateOkActions() {
myMainAction.update();
for (ActionWrapper wrapper : myPushActions) {
wrapper.update();
}
myMainAction.update();
if (getButton(myMainAction) instanceof JBOptionButton o) {
if (!Arrays.equals(myMainAction.getOptions(), o.getOptions())) {
o.setOptions(myMainAction.getOptions());
}
}
}
public void enableOkActions(boolean value) {
@@ -380,13 +386,16 @@ public class VcsPushDialog extends DialogWrapper implements VcsPushUi, UiDataPro
}
private static final class ComplexPushAction extends AbstractAction implements OptionAction {
private final ActionWrapper myDefaultAction;
private final List<? extends ActionWrapper> myOptions;
private final List<ActionWrapper> myActions;
private ComplexPushAction(@NotNull ActionWrapper defaultAction, @NotNull List<? extends ActionWrapper> additionalActions) {
super(defaultAction.getName());
myDefaultAction = defaultAction;
myOptions = additionalActions;
private ActionWrapper myDefaultAction;
private List<ActionWrapper> myOptions;
private ComplexPushAction(@NotNull List<ActionWrapper> actions) {
super(actions.getFirst().getName());
myActions = actions;
myDefaultAction = actions.getFirst();
myOptions = actions.subList(1, actions.size());
}
@Override
@@ -397,12 +406,19 @@ public class VcsPushDialog extends DialogWrapper implements VcsPushUi, UiDataPro
@Override
public void setEnabled(boolean isEnabled) {
super.setEnabled(isEnabled);
for (Action optionAction : myOptions) {
for (Action optionAction : myActions) {
optionAction.setEnabled(isEnabled);
}
}
public void update() {
int firstEnabled = ContainerUtil.indexOf(myActions, it -> it.isEnabled());
if (firstEnabled >= 0) {
myDefaultAction = myActions.get(firstEnabled);
myOptions = new ArrayList<>();
myOptions.addAll(myActions.subList(0, firstEnabled));
myOptions.addAll(myActions.subList(firstEnabled + 1, myActions.size()));
}
VcsPushUi dialog = myDefaultAction.myDialog;
PushActionBase realAction = myDefaultAction.myRealAction;