From 53c5aea8323672d3464c869a5026e7d709be482e Mon Sep 17 00:00:00 2001 From: Alexey Pegov Date: Wed, 13 Apr 2011 18:09:37 +0400 Subject: [PATCH] collapse project path to ~/path if project is placed under user home dir [mac & linux] in frame title & project view --- .../intellij/openapi/project/ProjectUtil.java | 35 +++++++++++++++++++ .../impl/nodes/PsiDirectoryNode.java | 7 +++- .../wm/impl/PlatformFrameTitleBuilder.java | 3 +- 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/platform/lang-api/src/com/intellij/openapi/project/ProjectUtil.java b/platform/lang-api/src/com/intellij/openapi/project/ProjectUtil.java index 20effd6324ea..dec2bfb9fdb1 100644 --- a/platform/lang-api/src/com/intellij/openapi/project/ProjectUtil.java +++ b/platform/lang-api/src/com/intellij/openapi/project/ProjectUtil.java @@ -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(); diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/PsiDirectoryNode.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/PsiDirectoryNode.java index c31486f261e7..841518078327 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/PsiDirectoryNode.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/PsiDirectoryNode.java @@ -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 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)) { diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/PlatformFrameTitleBuilder.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/PlatformFrameTitleBuilder.java index 831969c7a75b..a4a23b5732fc 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/PlatformFrameTitleBuilder.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/PlatformFrameTitleBuilder.java @@ -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(); }