mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
dir-diff: open API for other DiffTool impls; cleanup
This commit is contained in:
@@ -53,9 +53,7 @@ public abstract class DiffWindowBase {
|
||||
.setParent(myHints.getParent())
|
||||
.setDimensionServiceKey(dialogGroupKey)
|
||||
.setPreferredFocusedComponent(() -> myProcessor.getPreferredFocusedComponent())
|
||||
.setOnShowCallback(() -> {
|
||||
myProcessor.updateRequest();
|
||||
})
|
||||
.setOnShowCallback(() -> myProcessor.updateRequest())
|
||||
.build();
|
||||
myWrapper.setImages(DiffUtil.DIFF_FRAME_ICONS);
|
||||
Disposer.register(myWrapper, myProcessor);
|
||||
|
||||
@@ -19,7 +19,11 @@ import com.intellij.diff.DiffContext;
|
||||
import com.intellij.diff.FrameDiffTool;
|
||||
import com.intellij.diff.requests.ContentDiffRequest;
|
||||
import com.intellij.diff.requests.DiffRequest;
|
||||
import com.intellij.ide.diff.DiffElement;
|
||||
import com.intellij.ide.diff.DirDiffSettings;
|
||||
import com.intellij.internal.statistic.UsageTrigger;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class DirDiffTool implements FrameDiffTool {
|
||||
public static final DirDiffTool INSTANCE = new DirDiffTool();
|
||||
@@ -27,7 +31,8 @@ public class DirDiffTool implements FrameDiffTool {
|
||||
@NotNull
|
||||
@Override
|
||||
public DiffViewer createComponent(@NotNull DiffContext context, @NotNull DiffRequest request) {
|
||||
return new DirDiffViewer(context, (ContentDiffRequest)request);
|
||||
UsageTrigger.trigger("diff.DirDiffViewer");
|
||||
return createViewer(context, (ContentDiffRequest)request);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -40,4 +45,19 @@ public class DirDiffTool implements FrameDiffTool {
|
||||
public String getName() {
|
||||
return "Directory viewer";
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static FrameDiffTool.DiffViewer createViewer(@NotNull DiffContext context,
|
||||
@NotNull ContentDiffRequest request) {
|
||||
return new DirDiffViewer(context, request);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static FrameDiffTool.DiffViewer createViewer(@NotNull DiffContext context,
|
||||
@NotNull DiffElement element1,
|
||||
@NotNull DiffElement element2,
|
||||
@NotNull DirDiffSettings settings,
|
||||
@Nullable String helpID) {
|
||||
return new DirDiffViewer(context, element1, element2, settings, helpID);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,6 @@ import com.intellij.ide.diff.DirDiffSettings;
|
||||
import com.intellij.ide.diff.JarFileDiffElement;
|
||||
import com.intellij.ide.diff.VirtualFileDiffElement;
|
||||
import com.intellij.ide.highlighter.ArchiveFileType;
|
||||
import com.intellij.internal.statistic.UsageTrigger;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.actionSystem.DefaultActionGroup;
|
||||
import com.intellij.openapi.actionSystem.PlatformDataKeys;
|
||||
@@ -51,26 +50,28 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
class DirDiffViewer implements FrameDiffTool.DiffViewer {
|
||||
@NotNull private final DiffContext myContext;
|
||||
@NotNull private final ContentDiffRequest myRequest;
|
||||
|
||||
@NotNull private final DirDiffPanel myDirDiffPanel;
|
||||
@NotNull private final JPanel myPanel;
|
||||
private final DirDiffPanel myDirDiffPanel;
|
||||
private final JPanel myPanel;
|
||||
private final String myHelpID;
|
||||
|
||||
public DirDiffViewer(@NotNull DiffContext context, @NotNull ContentDiffRequest request) {
|
||||
UsageTrigger.trigger("diff.DirDiffViewer");
|
||||
DirDiffViewer(@NotNull DiffContext context, @NotNull ContentDiffRequest request) {
|
||||
this(context,
|
||||
createDiffElement(request.getContents().get(0)),
|
||||
createDiffElement(request.getContents().get(1)),
|
||||
ObjectUtils.notNull(context.getUserData(DirDiffSettings.KEY), new DirDiffSettings()),
|
||||
"reference.dialogs.diff.folder");
|
||||
}
|
||||
|
||||
myContext = context;
|
||||
myRequest = request;
|
||||
|
||||
List<DiffContent> contents = request.getContents();
|
||||
DiffElement element1 = createDiffElement(contents.get(0));
|
||||
DiffElement element2 = createDiffElement(contents.get(1));
|
||||
DirDiffViewer(@NotNull DiffContext context,
|
||||
@NotNull DiffElement element1,
|
||||
@NotNull DiffElement element2,
|
||||
@NotNull DirDiffSettings settings,
|
||||
@Nullable String helpID) {
|
||||
myHelpID = helpID;
|
||||
|
||||
Project project = context.getProject();
|
||||
if (project == null) project = DefaultProjectFactory.getInstance().getDefaultProject();
|
||||
|
||||
DirDiffSettings settings = ObjectUtils.notNull(context.getUserData(DirDiffSettings.KEY), new DirDiffSettings());
|
||||
DirDiffTableModel model = new DirDiffTableModel(project, element1, element2, settings);
|
||||
|
||||
myDirDiffPanel = new DirDiffPanel(model, new DirDiffWindow() {
|
||||
@@ -90,7 +91,7 @@ class DirDiffViewer implements FrameDiffTool.DiffViewer {
|
||||
myPanel.add(myDirDiffPanel.getPanel(), BorderLayout.CENTER);
|
||||
DataManager.registerDataProvider(myPanel, dataId -> {
|
||||
if (PlatformDataKeys.HELP_ID.is(dataId)) {
|
||||
return "reference.dialogs.diff.folder";
|
||||
return myHelpID;
|
||||
}
|
||||
return myDirDiffPanel.getData(dataId);
|
||||
});
|
||||
|
||||
@@ -30,7 +30,6 @@ import com.intellij.ide.diff.DiffElement;
|
||||
import com.intellij.ide.util.PropertiesComponent;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.diff.impl.dir.actions.DirDiffToolbarActions;
|
||||
import com.intellij.openapi.diff.impl.dir.actions.RefreshDirDiffAction;
|
||||
import com.intellij.openapi.keymap.KeymapUtil;
|
||||
@@ -79,10 +78,10 @@ import static com.intellij.util.ArrayUtil.toObjectArray;
|
||||
*/
|
||||
@SuppressWarnings({"unchecked"})
|
||||
public class DirDiffPanel implements Disposable, DataProvider {
|
||||
private static final Logger LOG = Logger.getInstance(DirDiffPanel.class);
|
||||
|
||||
public static final String DIVIDER_PROPERTY = "dir.diff.panel.divider.location";
|
||||
|
||||
private static final int DIVIDER_PROPERTY_DEFAULT_VALUE = 200;
|
||||
|
||||
private JPanel myDiffPanel;
|
||||
private JBTable myTable;
|
||||
private JPanel myComponent;
|
||||
@@ -130,21 +129,22 @@ public class DirDiffPanel implements Disposable, DataProvider {
|
||||
myTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
|
||||
@Override
|
||||
public void valueChanged(ListSelectionEvent e) {
|
||||
final int lastIndex = e.getLastIndex();
|
||||
final int firstIndex = e.getFirstIndex();
|
||||
final DirDiffElementImpl last = myModel.getElementAt(lastIndex);
|
||||
final DirDiffElementImpl first = myModel.getElementAt(firstIndex);
|
||||
ListSelectionModel selectionModel = (ListSelectionModel)e.getSource();
|
||||
int lastIndex = e.getLastIndex();
|
||||
int firstIndex = e.getFirstIndex();
|
||||
DirDiffElementImpl last = myModel.getElementAt(lastIndex);
|
||||
DirDiffElementImpl first = myModel.getElementAt(firstIndex);
|
||||
if (last == null || first == null) {
|
||||
update(false);
|
||||
return;
|
||||
}
|
||||
if (last.isSeparator()) {
|
||||
final int ind = lastIndex + ((lastIndex < firstIndex) ? 1 : -1);
|
||||
myTable.getSelectionModel().addSelectionInterval(ind, ind);
|
||||
if (last.isSeparator() && selectionModel.isSelectedIndex(lastIndex)) {
|
||||
int ind = lastIndex + ((lastIndex < firstIndex) ? 1 : -1);
|
||||
selectionModel.addSelectionInterval(ind, ind);
|
||||
}
|
||||
else if (first.isSeparator()) {
|
||||
final int ind = firstIndex + ((firstIndex < lastIndex) ? 1 : -1);
|
||||
myTable.getSelectionModel().addSelectionInterval(ind, ind);
|
||||
if (first.isSeparator() && selectionModel.isSelectedIndex(firstIndex)) {
|
||||
int ind = firstIndex + ((firstIndex < lastIndex) ? 1 : -1);
|
||||
selectionModel.addSelectionInterval(ind, ind);
|
||||
}
|
||||
else {
|
||||
update(false);
|
||||
@@ -153,7 +153,6 @@ public class DirDiffPanel implements Disposable, DataProvider {
|
||||
}
|
||||
});
|
||||
if (model.isOperationsEnabled()) {
|
||||
|
||||
new AnAction("Change diff operation") {
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
|
||||
Reference in New Issue
Block a user