From 560c2c845230d0aba46df85a27d952fbdca27880 Mon Sep 17 00:00:00 2001 From: Nadya Zabrodina Date: Wed, 12 Nov 2014 14:16:52 +0300 Subject: [PATCH] Copy Revision Number and Create Patch actions added for push dialog content --- .../com/intellij/dvcs/push/ui/PushLog.java | 54 ++++++++++++------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java index 355300b4814b..bc0fc8d1291c 100644 --- a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java +++ b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java @@ -20,15 +20,17 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Splitter; import com.intellij.openapi.vcs.VcsDataKeys; import com.intellij.openapi.vcs.changes.Change; +import com.intellij.openapi.vcs.changes.TextRevisionNumber; import com.intellij.openapi.vcs.changes.committed.CommittedChangesTreeBrowser; import com.intellij.openapi.vcs.changes.ui.ChangesBrowser; -import com.intellij.ui.CheckboxTree; -import com.intellij.ui.CheckedTreeNode; -import com.intellij.ui.ColoredTreeCellRenderer; -import com.intellij.ui.ScrollPaneFactory; +import com.intellij.openapi.vcs.history.VcsRevisionNumber; +import com.intellij.ui.*; import com.intellij.util.ArrayUtil; +import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.tree.TreeUtil; +import com.intellij.vcs.log.Hash; +import com.intellij.vcs.log.ui.VcsLogUiImpl; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -48,6 +50,7 @@ import java.util.List; public class PushLog extends JPanel implements TypeSafeDataProvider { + private final static String COMMIT_MENU = "Vcs.Push.ContextMenu"; private static final String START_EDITING = "startEditing"; private final ChangesBrowser myChangesBrowser; private final CheckboxTree myTree; @@ -163,6 +166,7 @@ public class PushLog extends JPanel implements TypeSafeDataProvider { myTree.setRowHeight(0); ToolTipManager.sharedInstance().registerComponent(myTree); + PopupHandler.installPopupHandler(myTree, VcsLogUiImpl.POPUP_ACTION_GROUP, COMMIT_MENU); myChangesBrowser = new ChangesBrowser(project, null, Collections.emptyList(), null, false, true, null, ChangesBrowser.MyUseCase.LOCAL_CHANGES, @@ -180,21 +184,18 @@ public class PushLog extends JPanel implements TypeSafeDataProvider { } private void updateChangesView() { - int[] rows = myTree.getSelectionRows(); - if (rows != null && rows.length != 0) { + List commitNodes = getSelectedCommitNodes(); + if (!commitNodes.isEmpty()) { myChangesBrowser.getViewer().setEmptyText("No differences"); - myChangesBrowser.setChangesToDisplay(collectAllChanges(rows)); } else { setDefaultEmptyText(); - myChangesBrowser.setChangesToDisplay(Collections.emptyList()); } + myChangesBrowser.setChangesToDisplay(collectAllChanges(commitNodes)); } @NotNull - private List collectAllChanges(@NotNull int[] selectedRows) { - List selectedNodes = getNodesForRows(getSortedRows(selectedRows)); - List commitNodes = collectSelectedCommitNodes(selectedNodes); + private static List collectAllChanges(@NotNull List commitNodes) { return CommittedChangesTreeBrowser.zipChanges(collectChanges(commitNodes)); } @@ -241,16 +242,33 @@ public class PushLog extends JPanel implements TypeSafeDataProvider { myChangesBrowser.getViewer().setEmptyText("No commits selected"); } - // Make changes available for diff action + // Make changes available for diff action; revisionNumber for create patch and copy revision number actions @Override public void calcData(DataKey key, DataSink sink) { - if (VcsDataKeys.CHANGES.equals(key)) { - int[] rows = myTree.getSelectionRows(); - if (rows != null && rows.length != 0) { - Collection changes = collectAllChanges(rows); - sink.put(key, ArrayUtil.toObjectArray(changes, Change.class)); - } + if (VcsDataKeys.CHANGES == key) { + List commitNodes = getSelectedCommitNodes(); + sink.put(key, ArrayUtil.toObjectArray(collectAllChanges(commitNodes), Change.class)); } + else if (VcsDataKeys.VCS_REVISION_NUMBERS == key) { + List commitNodes = getSelectedCommitNodes(); + sink.put(key, ArrayUtil.toObjectArray(ContainerUtil.map(commitNodes, new Function() { + @Override + public VcsRevisionNumber fun(CommitNode commitNode) { + Hash hash = commitNode.getUserObject().getId(); + return new TextRevisionNumber(hash.asString(), hash.toShortString()); + } + }), VcsRevisionNumber.class)); + } + } + + @NotNull + private List getSelectedCommitNodes() { + int[] rows = myTree.getSelectionRows(); + if (rows != null && rows.length != 0) { + List selectedNodes = getNodesForRows(getSortedRows(rows)); + return collectSelectedCommitNodes(selectedNodes); + } + return ContainerUtil.emptyList(); } @NotNull