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
;
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
) {
45 myDecorator
= decorator
;
46 if (!ChangesUtil
.getFilePath(userObject
).isDirectory()) {
52 protected boolean isDirectory() {
53 return ChangesUtil
.getFilePath(getUserObject()).isDirectory();
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
);
87 appendSwitched(renderer
);
90 final Icon addIcon
= change
.getAdditionalIcon();
91 if (addIcon
!= null) {
92 renderer
.setIcon(addIcon
);
94 if (filePath
.isDirectory() || !isLeaf()) {
95 renderer
.setIcon(expanded ? Icons
.DIRECTORY_OPEN_ICON
: Icons
.DIRECTORY_CLOSED_ICON
);
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();
123 public String
getTextPresentation() {
124 return ChangesUtil
.getFilePath(getUserObject()).getName();
128 public String
toString() {
129 return FileUtil
.toSystemDependentName(ChangesUtil
.getFilePath(getUserObject()).getPath());
132 public int getSortWeight() {
136 public int compareUserObjects(final Object o2
) {
137 if (o2
instanceof Change
) {
138 return ChangesUtil
.getFilePath(getUserObject()).getName().compareToIgnoreCase(ChangesUtil
.getFilePath((Change
)o2
).getName());