2 * Copyright (c) 2000-2007 JetBrains s.r.o. All Rights Reserved.
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
;
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
) {
33 myDecorator
= decorator
;
34 if (!ChangesUtil
.getFilePath(userObject
).isDirectory()) {
40 protected boolean isDirectory() {
41 return ChangesUtil
.getFilePath(getUserObject()).isDirectory();
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
);
70 appendSwitched(renderer
);
73 final Icon addIcon
= change
.getAdditionalIcon();
74 if (addIcon
!= null) {
75 renderer
.setIcon(addIcon
);
77 if (filePath
.isDirectory() || !isLeaf()) {
78 renderer
.setIcon(expanded ? Icons
.DIRECTORY_OPEN_ICON
: Icons
.DIRECTORY_CLOSED_ICON
);
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
);
95 renderer
.append(" [switched to " + branch
+ "]", SimpleTextAttributes
.REGULAR_ATTRIBUTES
);
100 public String
getTooltip() {
101 final Change change
= getUserObject();
102 return change
.getDescription();
106 public String
getTextPresentation() {
107 return ChangesUtil
.getFilePath(getUserObject()).getName();
111 public String
toString() {
112 return FileUtil
.toSystemDependentName(ChangesUtil
.getFilePath(getUserObject()).getPath());
115 public int getSortWeight() {
119 public int compareUserObjects(final Object o2
) {
120 if (o2
instanceof Change
) {
121 return ChangesUtil
.getFilePath(getUserObject()).getName().compareToIgnoreCase(ChangesUtil
.getFilePath((Change
)o2
).getName());