IDEA-27603 (Indicate which branch is being worked on)
[fedora-idea.git] / platform / vcs-impl / src / com / intellij / openapi / vcs / changes / ui / ChangesBrowserChangeNode.java
blobe51bc3b2ca23990007e2167ed0b493fef13b18b2
1 /*
2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package com.intellij.openapi.vcs.changes.ui;
19 import com.intellij.openapi.project.Project;
20 import com.intellij.openapi.util.io.FileUtil;
21 import com.intellij.openapi.vcs.FilePath;
22 import com.intellij.openapi.vcs.changes.Change;
23 import com.intellij.openapi.vcs.changes.ChangeListManager;
24 import com.intellij.openapi.vcs.changes.ChangesUtil;
25 import com.intellij.openapi.vcs.changes.issueLinks.TreeLinkMouseListener;
26 import com.intellij.openapi.vfs.VirtualFile;
27 import com.intellij.ui.SimpleTextAttributes;
28 import com.intellij.util.Icons;
29 import org.jetbrains.annotations.Nullable;
31 import javax.swing.*;
32 import java.awt.*;
33 import java.io.File;
35 /**
36 * @author yole
38 public class ChangesBrowserChangeNode extends ChangesBrowserNode<Change> implements TreeLinkMouseListener.HaveTooltip {
39 private final Project myProject;
40 private final ChangeNodeDecorator myDecorator;
42 protected ChangesBrowserChangeNode(final Project project, Change userObject, @Nullable final ChangeNodeDecorator decorator) {
43 super(userObject);
44 myProject = project;
45 myDecorator = decorator;
46 if (!ChangesUtil.getFilePath(userObject).isDirectory()) {
47 myCount = 1;
51 @Override
52 protected boolean isDirectory() {
53 return ChangesUtil.getFilePath(getUserObject()).isDirectory();
56 @Override
57 public void render(final ChangesBrowserNodeRenderer renderer, final boolean selected, final boolean expanded, final boolean hasFocus) {
58 final Change change = getUserObject();
59 final FilePath filePath = ChangesUtil.getFilePath(change);
60 final String fileName = filePath.getName();
61 VirtualFile vFile = filePath.getVirtualFile();
63 if (myDecorator != null) {
64 myDecorator.preDecorate(change, renderer, renderer.isShowFlatten());
67 final Color changeColor = change.getFileStatus().getColor();
68 renderer.appendFileName(vFile, fileName, changeColor);
70 final String originText = change.getOriginText(myProject);
71 if (originText != null) {
72 renderer.append(" " + originText, SimpleTextAttributes.REGULAR_ATTRIBUTES);
75 if (renderer.isShowFlatten()) {
76 final File parentFile = filePath.getIOFile().getParentFile();
77 if (parentFile != null) {
78 renderer.append(" (" + parentFile.getPath() + ")", SimpleTextAttributes.GRAYED_ATTRIBUTES);
80 appendSwitched(renderer);
82 else if (getCount() != 1 || getDirectoryCount() != 0) {
83 appendSwitched(renderer);
84 appendCount(renderer);
86 else {
87 appendSwitched(renderer);
90 final Icon addIcon = change.getAdditionalIcon();
91 if (addIcon != null) {
92 renderer.setIcon(addIcon);
93 } else {
94 if (filePath.isDirectory() || !isLeaf()) {
95 renderer.setIcon(expanded ? Icons.DIRECTORY_OPEN_ICON : Icons.DIRECTORY_CLOSED_ICON);
97 else {
98 renderer.setIcon(filePath.getFileType().getIcon());
102 if (myDecorator != null) {
103 myDecorator.decorate(change, renderer, renderer.isShowFlatten());
107 private void appendSwitched(final ChangesBrowserNodeRenderer renderer) {
108 final VirtualFile virtualFile = ChangesUtil.getFilePath(getUserObject()).getVirtualFile();
109 if (virtualFile != null) {
110 String branch = ChangeListManager.getInstance(myProject).getSwitchedBranch(virtualFile);
111 if (branch != null) {
112 renderer.append(" [switched to " + branch + "]", SimpleTextAttributes.REGULAR_ATTRIBUTES);
117 public String getTooltip() {
118 final Change change = getUserObject();
119 return change.getDescription();
122 @Override
123 public String getTextPresentation() {
124 return ChangesUtil.getFilePath(getUserObject()).getName();
127 @Override
128 public String toString() {
129 return FileUtil.toSystemDependentName(ChangesUtil.getFilePath(getUserObject()).getPath());
132 public int getSortWeight() {
133 return 6;
136 public int compareUserObjects(final Object o2) {
137 if (o2 instanceof Change) {
138 return ChangesUtil.getFilePath(getUserObject()).getName().compareToIgnoreCase(ChangesUtil.getFilePath((Change)o2).getName());
140 return 0;