VCS: file changed remotely hint
[fedora-idea.git] / vcs-impl / src / com / intellij / openapi / vcs / changes / ui / ChangesBrowserChangeNode.java
blobc7a418419eaa86ad9e5e96f1250db0eb44c3dfe4
1 /*
2 * Copyright (c) 2000-2007 JetBrains s.r.o. All Rights Reserved.
3 */
5 package com.intellij.openapi.vcs.changes.ui;
7 import com.intellij.openapi.project.Project;
8 import com.intellij.openapi.util.io.FileUtil;
9 import com.intellij.openapi.vcs.FilePath;
10 import com.intellij.openapi.vcs.changes.Change;
11 import com.intellij.openapi.vcs.changes.ChangeListManager;
12 import com.intellij.openapi.vcs.changes.ChangesUtil;
13 import com.intellij.openapi.vcs.changes.issueLinks.TreeLinkMouseListener;
14 import com.intellij.openapi.vfs.VirtualFile;
15 import com.intellij.ui.SimpleTextAttributes;
16 import com.intellij.util.Icons;
17 import org.jetbrains.annotations.Nullable;
19 import javax.swing.*;
20 import java.awt.*;
21 import java.io.File;
23 /**
24 * @author yole
26 public class ChangesBrowserChangeNode extends ChangesBrowserNode<Change> implements TreeLinkMouseListener.HaveTooltip {
27 private final Project myProject;
28 private final ChangeNodeDecorator myDecorator;
30 protected ChangesBrowserChangeNode(final Project project, Change userObject, @Nullable final ChangeNodeDecorator decorator) {
31 super(userObject);
32 myProject = project;
33 myDecorator = decorator;
34 if (!ChangesUtil.getFilePath(userObject).isDirectory()) {
35 myCount = 1;
39 @Override
40 protected boolean isDirectory() {
41 return ChangesUtil.getFilePath(getUserObject()).isDirectory();
44 @Override
45 public void render(final ChangesBrowserNodeRenderer renderer, final boolean selected, final boolean expanded, final boolean hasFocus) {
46 final Change change = getUserObject();
47 final FilePath filePath = ChangesUtil.getFilePath(change);
48 final String fileName = filePath.getName();
49 VirtualFile vFile = filePath.getVirtualFile();
50 final Color changeColor = change.getFileStatus().getColor();
51 renderer.appendFileName(vFile, fileName, changeColor);
53 final String originText = change.getOriginText(myProject);
54 if (originText != null) {
55 renderer.append(" " + originText, SimpleTextAttributes.REGULAR_ATTRIBUTES);
58 if (renderer.isShowFlatten()) {
59 final File parentFile = filePath.getIOFile().getParentFile();
60 if (parentFile != null) {
61 renderer.append(" (" + parentFile.getPath() + ")", SimpleTextAttributes.GRAYED_ATTRIBUTES);
63 appendSwitched(renderer);
65 else if (getCount() != 1 || getDirectoryCount() != 0) {
66 appendSwitched(renderer);
67 appendCount(renderer);
69 else {
70 appendSwitched(renderer);
73 final Icon addIcon = change.getAdditionalIcon();
74 if (addIcon != null) {
75 renderer.setIcon(addIcon);
76 } else {
77 if (filePath.isDirectory() || !isLeaf()) {
78 renderer.setIcon(expanded ? Icons.DIRECTORY_OPEN_ICON : Icons.DIRECTORY_CLOSED_ICON);
80 else {
81 renderer.setIcon(filePath.getFileType().getIcon());
85 if (myDecorator != null) {
86 myDecorator.decorate(change, renderer);
90 private void appendSwitched(final ChangesBrowserNodeRenderer renderer) {
91 final VirtualFile virtualFile = ChangesUtil.getFilePath(getUserObject()).getVirtualFile();
92 if (virtualFile != null) {
93 String branch = ChangeListManager.getInstance(myProject).getSwitchedBranch(virtualFile);
94 if (branch != null) {
95 renderer.append(" [switched to " + branch + "]", SimpleTextAttributes.REGULAR_ATTRIBUTES);
100 public String getTooltip() {
101 final Change change = getUserObject();
102 return change.getDescription();
105 @Override
106 public String getTextPresentation() {
107 return ChangesUtil.getFilePath(getUserObject()).getName();
110 @Override
111 public String toString() {
112 return FileUtil.toSystemDependentName(ChangesUtil.getFilePath(getUserObject()).getPath());
115 public int getSortWeight() {
116 return 6;
119 public int compareUserObjects(final Object o2) {
120 if (o2 instanceof Change) {
121 return ChangesUtil.getFilePath(getUserObject()).getName().compareToIgnoreCase(ChangesUtil.getFilePath((Change)o2).getName());
123 return 0;