Platform: copy/move dialogs size fixed

This commit is contained in:
Anton Makeev
2012-12-03 16:22:08 +01:00
parent ea9bcc53d7
commit c876d45c35
3 changed files with 26 additions and 10 deletions
@@ -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<String> 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) {
@@ -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);
}
@@ -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;
}