diff --git a/platform/lang-impl/src/com/intellij/refactoring/copy/CopyFilesOrDirectoriesDialog.java b/platform/lang-impl/src/com/intellij/refactoring/copy/CopyFilesOrDirectoriesDialog.java index e5fabcec5687..1e87733585b8 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/copy/CopyFilesOrDirectoriesDialog.java +++ b/platform/lang-impl/src/com/intellij/refactoring/copy/CopyFilesOrDirectoriesDialog.java @@ -30,6 +30,8 @@ import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.ui.TextComponentAccessor; import com.intellij.openapi.ui.impl.DialogWrapperPeerImpl; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; @@ -52,6 +54,8 @@ import java.io.File; import java.util.List; public class CopyFilesOrDirectoriesDialog extends DialogWrapper { + public static final int MAX_PATH_LENGTH = 70; + private JLabel myInformationLabel; private TextFieldWithHistoryWithBrowseButton myTargetDirectoryField; private JTextField myNewNameField; @@ -81,9 +85,10 @@ public class CopyFilesOrDirectoriesDialog extends DialogWrapper { String text; if (elements[0] instanceof PsiFile) { PsiFile file = (PsiFile)elements[0]; + String url = shortenPath(file.getVirtualFile()); text = doClone ? - RefactoringBundle.message("copy.files.clone.file.0", file.getVirtualFile().getPresentableUrl()) : - RefactoringBundle.message("copy.files.copy.file.0", file.getVirtualFile().getPresentableUrl()); + RefactoringBundle.message("copy.files.clone.file.0", url) : + RefactoringBundle.message("copy.files.copy.file.0", url); final String fileName = file.getName(); myNewNameField.setText(fileName); final int dotIdx = fileName.lastIndexOf("."); @@ -94,9 +99,10 @@ public class CopyFilesOrDirectoriesDialog extends DialogWrapper { } else { PsiDirectory directory = (PsiDirectory)elements[0]; + String url = shortenPath(directory.getVirtualFile()); text = doClone ? - RefactoringBundle.message("copy.files.clone.directory.0", directory.getVirtualFile().getPresentableUrl()) : - RefactoringBundle.message("copy.files.copy.directory.0", directory.getVirtualFile().getPresentableUrl()); + RefactoringBundle.message("copy.files.clone.directory.0", url) : + RefactoringBundle.message("copy.files.copy.directory.0", url); myNewNameField.setText(directory.getName()); } myInformationLabel.setText(text); @@ -112,6 +118,10 @@ public class CopyFilesOrDirectoriesDialog extends DialogWrapper { validateOKButton(); } + public static String shortenPath(VirtualFile file) { + return StringUtil.shortenPathWithEllipsis(file.getPresentableUrl(), MAX_PATH_LENGTH); + } + private void setMultipleElementCopyLabel(PsiElement[] elements) { boolean allFiles = true; boolean allDirectories = true; @@ -157,13 +167,14 @@ public class CopyFilesOrDirectoriesDialog extends DialogWrapper { }; if (myShowNewNameField) { - myNewNameField = new JTextField(60); + myNewNameField = new JTextField(); myNewNameField.getDocument().addDocumentListener(documentListener); formBuilder.addLabeledComponent(RefactoringBundle.message("copy.files.new.name.label"), myNewNameField); } if (myShowDirectoryField) { myTargetDirectoryField = new TextFieldWithHistoryWithBrowseButton(); + myTargetDirectoryField.setTextFieldPreferredWidth(MAX_PATH_LENGTH); final List recentEntries = RecentsManager.getInstance(myProject).getRecentEntries(RECENT_KEYS); if (recentEntries != null) { myTargetDirectoryField.getChildComponent().setHistory(recentEntries); @@ -173,7 +184,6 @@ public class CopyFilesOrDirectoriesDialog extends DialogWrapper { RefactoringBundle.message("the.file.will.be.copied.to.this.directory"), myProject, descriptor, TextComponentAccessor.TEXT_FIELD_WITH_HISTORY_WHOLE_TEXT); - myTargetDirectoryField.setTextFieldPreferredWidth(60); myTargetDirectoryField.getChildComponent().addDocumentListener(new DocumentAdapter() { @Override protected void textChanged(DocumentEvent e) { diff --git a/platform/lang-impl/src/com/intellij/refactoring/move/moveFilesOrDirectories/MoveFilesOrDirectoriesDialog.java b/platform/lang-impl/src/com/intellij/refactoring/move/moveFilesOrDirectories/MoveFilesOrDirectoriesDialog.java index e2a6132e9a86..189d7baa8553 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/move/moveFilesOrDirectories/MoveFilesOrDirectoriesDialog.java +++ b/platform/lang-impl/src/com/intellij/refactoring/move/moveFilesOrDirectories/MoveFilesOrDirectoriesDialog.java @@ -36,6 +36,7 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import com.intellij.refactoring.RefactoringBundle; import com.intellij.refactoring.RefactoringSettings; +import com.intellij.refactoring.copy.CopyFilesOrDirectoriesDialog; import com.intellij.refactoring.util.CommonRefactoringUtil; import com.intellij.ui.DocumentAdapter; import com.intellij.ui.NonFocusableCheckBox; @@ -109,7 +110,7 @@ public class MoveFilesOrDirectoriesDialog extends DialogWrapper { validateOKButton(); } }); - myTargetDirectoryField.setTextFieldPreferredWidth(60); + myTargetDirectoryField.setTextFieldPreferredWidth(CopyFilesOrDirectoriesDialog.MAX_PATH_LENGTH); Disposer.register(getDisposable(), myTargetDirectoryField); String shortcutText = KeymapUtil.getFirstKeyboardShortcutText(ActionManager.getInstance().getAction(IdeActions.ACTION_CODE_COMPLETION)); @@ -127,12 +128,12 @@ public class MoveFilesOrDirectoriesDialog extends DialogWrapper { if (psiElements.length == 1) { String text; if (psiElements[0] instanceof PsiFile) { - text = RefactoringBundle.message("move.file.0", - ((PsiFile)psiElements[0]).getVirtualFile().getPresentableUrl()); + text = RefactoringBundle.message("move.file.0", + CopyFilesOrDirectoriesDialog.shortenPath(((PsiFile)psiElements[0]).getVirtualFile())); } else { text = RefactoringBundle.message("move.directory.0", - ((PsiDirectory)psiElements[0]).getVirtualFile().getPresentableUrl()); + CopyFilesOrDirectoriesDialog.shortenPath(((PsiDirectory)psiElements[0]).getVirtualFile())); } myNameLabel.setText(text); } diff --git a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java index 9c1ec266e93f..e1f17e1152ab 100644 --- a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java +++ b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java @@ -2297,6 +2297,11 @@ public class StringUtil extends StringUtilRt { return buffer.toString(); } + @NotNull + public static String shortenPathWithEllipsis(@NotNull final String path, final int max_length) { + return shortenTextWithEllipsis(path, max_length, (int)(max_length * 0.7)); + } + public static boolean charsEqual(char a, char b, boolean ignoreCase) { return ignoreCase ? charsEqualIgnoreCase(a, b) : a == b; }