mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
diff: migration from old API - support onOkRunnable
This commit is contained in:
+27
-6
@@ -17,14 +17,15 @@ package com.intellij.openapi.vcs.changes.actions.migrate;
|
||||
|
||||
import com.intellij.diff.DiffDialogHints;
|
||||
import com.intellij.diff.DiffManager;
|
||||
import com.intellij.diff.DiffRequestPanel;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.diff.DiffRequest;
|
||||
import com.intellij.openapi.diff.DiffTool;
|
||||
import com.intellij.openapi.diff.DiffViewer;
|
||||
import com.intellij.openapi.diff.MergeRequest;
|
||||
import com.intellij.openapi.diff.impl.external.BinaryDiffTool;
|
||||
import com.intellij.openapi.diff.impl.external.DiffManagerImpl;
|
||||
import com.intellij.openapi.diff.impl.external.FrameDiffTool;
|
||||
import com.intellij.openapi.ui.DialogBuilder;
|
||||
import com.intellij.openapi.ui.DialogWrapper;
|
||||
import com.intellij.openapi.ui.WindowWrapper;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -39,16 +40,36 @@ public class MigrateDiffTool implements DiffTool {
|
||||
@Override
|
||||
public void show(DiffRequest request) {
|
||||
com.intellij.diff.requests.DiffRequest newRequest = MigrateToNewDiffUtil.convertRequest(request);
|
||||
WindowWrapper.Mode mode = FrameDiffTool.shouldOpenDialog(request.getHints()) ? WindowWrapper.Mode.MODAL : WindowWrapper.Mode.FRAME;
|
||||
DiffManager.getInstance().showDiff(request.getProject(), newRequest, new DiffDialogHints(mode));
|
||||
|
||||
Runnable onOkRunnable = request.getOnOkRunnable();
|
||||
if (onOkRunnable == null) {
|
||||
WindowWrapper.Mode mode = FrameDiffTool.shouldOpenDialog(request.getHints()) ? WindowWrapper.Mode.MODAL : WindowWrapper.Mode.FRAME;
|
||||
DiffManager.getInstance().showDiff(request.getProject(), newRequest, new DiffDialogHints(mode));
|
||||
}
|
||||
else {
|
||||
DialogBuilder builder = new DialogBuilder(request.getProject());
|
||||
DiffRequestPanel diffPanel = DiffManager.getInstance().createRequestPanel(request.getProject(), builder, builder.getWindow());
|
||||
diffPanel.setRequest(newRequest);
|
||||
|
||||
builder.setCenterPanel(diffPanel.getComponent());
|
||||
builder.setPreferredFocusComponent(diffPanel.getPreferredFocusedComponent());
|
||||
builder.setTitle(request.getWindowTitle());
|
||||
builder.setDimensionServiceKey(request.getGroupKey());
|
||||
|
||||
builder.setOkOperation(() -> {
|
||||
builder.getDialogWrapper().close(DialogWrapper.OK_EXIT_CODE);
|
||||
onOkRunnable.run();
|
||||
});
|
||||
|
||||
boolean useNonModal = request.getHints().contains(DiffTool.HINT_SHOW_NOT_MODAL_DIALOG);
|
||||
builder.showModal(!useNonModal);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canShow(DiffRequest request) {
|
||||
if (request instanceof MergeRequest) return false;
|
||||
if (request.getContents().length != 2) return false;
|
||||
if (request.getOnOkRunnable() != null) return false;
|
||||
if (!DiffManagerImpl.INTERNAL_DIFF.canShow(request) && !BinaryDiffTool.INSTANCE.canShow(request)) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
-37
@@ -1,17 +1,12 @@
|
||||
package com.intellij.openapi.vcs.changes.actions.migrate;
|
||||
|
||||
import com.intellij.diff.DiffContentFactory;
|
||||
import com.intellij.diff.chains.DiffRequestProducer;
|
||||
import com.intellij.diff.contents.DiffContent;
|
||||
import com.intellij.diff.requests.DiffRequest;
|
||||
import com.intellij.diff.requests.ErrorDiffRequest;
|
||||
import com.intellij.diff.requests.SimpleDiffRequest;
|
||||
import com.intellij.openapi.diff.SimpleContent;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.progress.ProcessCanceledException;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.UserDataHolder;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -20,22 +15,11 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import static com.intellij.openapi.util.text.StringUtil.notNullize;
|
||||
import static com.intellij.util.ObjectUtils.assertNotNull;
|
||||
|
||||
public class MigrateToNewDiffUtil {
|
||||
@NotNull
|
||||
public static DiffRequest convertRequest(@NotNull com.intellij.openapi.diff.DiffRequest oldRequest) {
|
||||
DiffRequest request = convertRequestFair(oldRequest);
|
||||
if (request != null) return request;
|
||||
|
||||
return new ErrorDiffRequest(new MyDiffRequestProducer(oldRequest), "Can't convert from old-style request");
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static DiffRequest convertRequestFair(@NotNull com.intellij.openapi.diff.DiffRequest oldRequest) {
|
||||
if (oldRequest.getOnOkRunnable() != null) return null;
|
||||
|
||||
com.intellij.openapi.diff.DiffContent[] contents = oldRequest.getContents();
|
||||
String[] titles = oldRequest.getContentTitles();
|
||||
List<DiffContent> newContents = new ArrayList<>(contents.length);
|
||||
@@ -65,25 +49,4 @@ public class MigrateToNewDiffUtil {
|
||||
return factory.create(project, document, oldContent.getContentType());
|
||||
}
|
||||
}
|
||||
|
||||
private static class MyDiffRequestProducer implements DiffRequestProducer {
|
||||
@NotNull private final com.intellij.openapi.diff.DiffRequest myRequest;
|
||||
|
||||
public MyDiffRequestProducer(@NotNull com.intellij.openapi.diff.DiffRequest request) {
|
||||
myRequest = request;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getName() {
|
||||
return notNullize(myRequest.getWindowTitle());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public DiffRequest process(@NotNull UserDataHolder context, @NotNull ProgressIndicator indicator)
|
||||
throws ProcessCanceledException {
|
||||
return new ErrorDiffRequest(this, "Can't convert from old-style request");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user