VCS: file changed remotely hint
[fedora-idea.git] / vcs-impl / src / com / intellij / openapi / vcs / changes / committed / RepositoryChangesBrowser.java
blob95688969c2b2313bda49e72957075d8f0df98e2a
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;
21 import javax.swing.*;
22 import java.util.Arrays;
23 import java.util.Collection;
24 import java.util.Collections;
25 import java.util.List;
27 /**
28 * @author yole
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) {
62 myUseCase = useCase;
65 public Object getData(@NonNls final String dataId) {
66 if (CommittedChangesBrowserUseCase.CONTEXT_NAME.equals(dataId)) {
67 return myUseCase;
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};
76 } else {
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) {
90 super.update(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));
105 return null;