collapse project path to ~/path if project is placed under user home dir [mac & linux] in frame title & project view

This commit is contained in:
Alexey Pegov
2011-04-13 18:09:37 +04:00
parent 9402500aa1
commit 53c5aea832
3 changed files with 43 additions and 2 deletions
@@ -21,14 +21,49 @@ package com.intellij.openapi.project;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtil;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFilePathWrapper;
import com.intellij.util.SystemProperties;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.io.IOException;
public class ProjectUtil {
private ProjectUtil() {
}
@Nullable
public static String getProjectLocationString(@NotNull final Project project) {
String projectPath = project.getLocation();
return getLocationRelativeToUserHome(projectPath);
}
@Nullable
public static String getLocationRelativeToUserHome(final String path) {
if (path == null) return null;
String _path = path;
if ((SystemInfo.isLinux || SystemInfo.isMac)) {
final File projectDir = new File(path);
final File userHomeDir = new File(SystemProperties.getUserHome());
try {
if (FileUtil.isAncestor(userHomeDir, projectDir, true)) {
_path = "~/" + FileUtil.getRelativePath(userHomeDir, projectDir);
}
}
catch (IOException e) {
// nothing
}
}
return _path;
}
public static String calcRelativeToProjectPath(final VirtualFile file, final Project project) {
if (file instanceof VirtualFilePathWrapper) {
return ((VirtualFilePathWrapper)file).getPresentablePath();
@@ -27,6 +27,7 @@ import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectUtil;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.roots.ui.configuration.ProjectSettingsService;
@@ -81,7 +82,11 @@ public class PsiDirectoryNode extends BasePsiNode<PsiDirectory> implements Navig
}
if (parentValue instanceof Project || parentValue instanceof Module) {
data.addText(" (" + directoryFile.getPresentableUrl() + ")", SimpleTextAttributes.GRAYED_ATTRIBUTES);
if (parentValue instanceof Project) {
data.addText(" (" + ProjectUtil.getLocationRelativeToUserHome(directoryFile.getPresentableUrl()) + ")", SimpleTextAttributes.GRAYED_ATTRIBUTES);
} else {
data.addText(" (" + directoryFile.getPresentableUrl() + ")", SimpleTextAttributes.GRAYED_ATTRIBUTES);
}
}
else if (ProjectRootsUtil.isSourceOrTestRoot(directoryFile, project)) {
if (ProjectRootsUtil.isInTestSource(directoryFile, project)) {
@@ -16,6 +16,7 @@
package com.intellij.openapi.wm.impl;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFilePathWrapper;
import com.intellij.platform.ProjectBaseDirectory;
@@ -27,7 +28,7 @@ public class PlatformFrameTitleBuilder extends FrameTitleBuilder {
public String getProjectTitle(final Project project) {
final VirtualFile baseDir = project.getBaseDir();
if (baseDir != null) {
return project.getName() + " - [" + baseDir.getPresentableUrl() + "]";
return project.getName() + " - [" + ProjectUtil.getLocationRelativeToUserHome(baseDir.getPresentableUrl()) + "]";
}
return project.getName();
}