1 package com
.intellij
.openapi
.vcs
.changes
.committed
;
3 import com
.intellij
.ide
.actions
.EditSourceAction
;
4 import com
.intellij
.ide
.impl
.TypeSafeDataProviderAdapter
;
5 import com
.intellij
.openapi
.actionSystem
.*;
6 import com
.intellij
.openapi
.application
.ModalityState
;
7 import com
.intellij
.openapi
.project
.Project
;
8 import com
.intellij
.openapi
.util
.IconLoader
;
9 import com
.intellij
.openapi
.vcs
.VcsDataKeys
;
10 import com
.intellij
.openapi
.vcs
.changes
.Change
;
11 import com
.intellij
.openapi
.vcs
.changes
.ChangeList
;
12 import com
.intellij
.openapi
.vcs
.changes
.ChangesUtil
;
13 import com
.intellij
.openapi
.vcs
.changes
.actions
.OpenRepositoryVersionAction
;
14 import com
.intellij
.openapi
.vcs
.changes
.actions
.RevertSelectedChangesAction
;
15 import com
.intellij
.openapi
.vcs
.changes
.actions
.ShowDiffWithLocalAction
;
16 import com
.intellij
.openapi
.vcs
.changes
.ui
.ChangesBrowser
;
17 import com
.intellij
.openapi
.vcs
.versionBrowser
.CommittedChangeList
;
18 import com
.intellij
.pom
.Navigatable
;
19 import org
.jetbrains
.annotations
.NonNls
;
22 import java
.util
.Arrays
;
23 import java
.util
.Collection
;
24 import java
.util
.Collections
;
25 import java
.util
.List
;
30 public class RepositoryChangesBrowser
extends ChangesBrowser
implements DataProvider
{
31 private CommittedChangesBrowserUseCase myUseCase
;
33 public RepositoryChangesBrowser(final Project project
, final List
<CommittedChangeList
> changeLists
) {
34 super(project
, changeLists
, Collections
.<Change
>emptyList(), null, false, false, null, MyUseCase
.COMMITTED_CHANGES
);
37 public RepositoryChangesBrowser(final Project project
, final List
<?
extends ChangeList
> changeLists
, final List
<Change
> changes
,
38 final ChangeList initialListSelection
) {
39 super(project
, changeLists
, changes
, initialListSelection
, false, false, null, MyUseCase
.COMMITTED_CHANGES
);
42 protected void buildToolBar(final DefaultActionGroup toolBarGroup
) {
43 super.buildToolBar(toolBarGroup
);
45 toolBarGroup
.add(new ShowDiffWithLocalAction());
46 final MyEditSourceAction editSourceAction
= new MyEditSourceAction();
47 editSourceAction
.registerCustomShortcutSet(CommonShortcuts
.getEditSource(), this);
48 toolBarGroup
.add(editSourceAction
);
49 OpenRepositoryVersionAction action
= new OpenRepositoryVersionAction();
50 toolBarGroup
.add(action
);
51 final RevertSelectedChangesAction revertSelectedChangesAction
= new RevertSelectedChangesAction();
52 toolBarGroup
.add(revertSelectedChangesAction
);
54 ActionGroup group
= (ActionGroup
) ActionManager
.getInstance().getAction("RepositoryChangesBrowserToolbar");
55 final AnAction
[] actions
= group
.getChildren(null);
56 for (AnAction anAction
: actions
) {
57 toolBarGroup
.add(anAction
);
61 public void setUseCase(final CommittedChangesBrowserUseCase useCase
) {
65 public Object
getData(@NonNls final String dataId
) {
66 if (CommittedChangesBrowserUseCase
.CONTEXT_NAME
.equals(dataId
)) {
70 else if (VcsDataKeys
.SELECTED_CHANGES
.getName().equals(dataId
)) {
71 final List
<Change
> list
= myViewer
.getSelectedChanges();
72 return list
.toArray(new Change
[list
.size()]);
73 } else if (VcsDataKeys
.CHANGE_LEAD_SELECTION
.getName().equals(dataId
)) {
74 final Change highestSelection
= myViewer
.getHighestLeadSelection();
75 return (highestSelection
== null) ?
new Change
[]{} : new Change
[] {highestSelection
};
77 final TypeSafeDataProviderAdapter adapter
= new TypeSafeDataProviderAdapter(this);
78 return adapter
.getData(dataId
);
82 private class MyEditSourceAction
extends EditSourceAction
{
83 private final Icon myEditSourceIcon
;
85 public MyEditSourceAction() {
86 myEditSourceIcon
= IconLoader
.getIcon("/actions/editSource.png");
89 public void update(final AnActionEvent event
) {
91 event
.getPresentation().setIcon(myEditSourceIcon
);
92 event
.getPresentation().setText("Edit Source");
93 if ((! ModalityState
.NON_MODAL
.equals(ModalityState
.current())) ||
94 CommittedChangesBrowserUseCase
.IN_AIR
.equals(event
.getDataContext().getData(CommittedChangesBrowserUseCase
.CONTEXT_NAME
))) {
95 event
.getPresentation().setEnabled(false);
99 protected Navigatable
[] getNavigatables(final DataContext dataContext
) {
100 Change
[] changes
= (Change
[])dataContext
.getData(VcsDataKeys
.SELECTED_CHANGES
.getName());
101 if (changes
!= null) {
102 Collection
<Change
> changeCollection
= Arrays
.asList(changes
);
103 return ChangesUtil
.getNavigatableArray(myProject
, ChangesUtil
.getFilesFromChanges(changeCollection
));