blob: b51b5d1eca88de78e54697d2ba9aee961f5aabe3 [file] [log] [blame]
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.openapi.ui.ex;
import com.intellij.CommonBundle;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.UIBundle;
import com.intellij.util.ArrayUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
public class MessagesEx extends Messages {
public static MessageInfo fileIsReadOnly(Project project, String filePath) {
return error(project, UIBundle.message("file.is.read.only.message.text", filePath));
}
public static MessageInfo filesAreReadOnly(Project project, String[] files) {
if (files.length == 1){
return fileIsReadOnly(project, files[0]);
} else {
return error(project, UIBundle.message("files.are.read.only.message.text", filePaths(files)));
}
}
private static String filePaths(String[] files) {
return StringUtil.join(files, ",\n");
}
public static MessageInfo fileIsReadOnly(Project project, VirtualFile file) {
return fileIsReadOnly(project, file.getPresentableUrl());
}
public static MessageInfo error(Project project, String message) {
return error(project, message, UIBundle.message("error.dialog.title"));
}
@NotNull
public static MessageInfo error(Project project, String message, String title) {
return new MessageInfo(project, message, title);
}
public static void showErrorDialog(@Nullable Component parent, String message, @NotNull String title) {
if (parent != null) Messages.showErrorDialog(parent, message, title);
else showErrorDialog(message, title);
}
public static void showWarningDialog(@Nullable Component parent, String message, @NotNull String title) {
if (parent != null) Messages.showWarningDialog(parent, message, title);
else showWarningDialog(message, title);
}
public static void showInfoMessage(@Nullable Component parent, String message, @NotNull String title) {
if (parent != null) Messages.showInfoMessage(parent, message, title);
else showInfoMessage(message, title);
}
public static int showOkCancelDialog(@Nullable Component parent, String message, String title, Icon icon) {
return parent != null ? Messages.showOkCancelDialog(parent, message, title, icon) : showOkCancelDialog(message, title, icon);
}
public abstract static class BaseDialogInfo<ThisClass extends BaseDialogInfo> {
private final Project myProject;
private String myMessage;
private String myTitle;
private Icon myIcon;
private String[] myOptions = {CommonBundle.getOkButtonText()};
private int myDefaultOption = 0;
protected BaseDialogInfo(Project project) {
myProject = project;
}
public BaseDialogInfo(Project project, @NotNull String message, String title, Icon icon) {
this(project);
myMessage = message;
myTitle = title;
myIcon = icon;
}
@NotNull
public ThisClass setTitle(String title) {
myTitle = title;
return getThis();
}
public String getMessage() {
return myMessage;
}
@NotNull
public ThisClass appendMessage(@NotNull String message) {
myMessage += message;
return getThis();
}
public void setOptions(String[] options, int defaultOption) {
myOptions = options;
myDefaultOption = defaultOption;
}
@NotNull
protected abstract ThisClass getThis();
@NotNull
public ThisClass setIcon(Icon icon) {
myIcon = icon;
return getThis();
}
public void setMessage(@NotNull String message) {
myMessage = message;
}
public Project getProject() {
return myProject;
}
public String getTitle() {
return myTitle;
}
public String[] getOptions() {
return myOptions;
}
public int getDefaultOption() {
return myDefaultOption;
}
public Icon getIcon() {
return myIcon;
}
}
public static class MessageInfo extends BaseDialogInfo<MessageInfo> {
public MessageInfo(Project project, String message, String title) {
super(project, message, title, getErrorIcon());
}
public int showNow() {
return showDialog(getProject(), getMessage(), getTitle(), getOptions(), getDefaultOption(), getIcon());
}
public void showLater() {
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
showNow();
}
}, ApplicationManager.getApplication().getDisposed());
}
@YesNoResult
public int askYesNo() {
setIcon(getQuestionIcon());
return showYesNoDialog(getProject(), getMessage(), getTitle(), getIcon());
}
public int ask(String[] options, int defaultOptionIndex) {
setOptions(options, defaultOptionIndex);
return showNow();
}
@NotNull
@Override
protected MessageInfo getThis() {
return this;
}
}
public static class ChoiceInfo extends BaseInputInfo<ChoiceInfo> {
private String[] myChoises = ArrayUtil.EMPTY_STRING_ARRAY;
private String myDefaultChoice = null;
public ChoiceInfo(Project project) {
super(project);
setIcon(getQuestionIcon());
setOptions(new String[]{CommonBundle.getOkButtonText()}, 0);
}
@NotNull
@Override
public ChoiceInfo getThis() {
return this;
}
public ChoiceInfo setChoices(String[] choices, String defaultChoice) {
myChoises = choices;
myDefaultChoice = defaultChoice;
return getThis();
}
@Override
public UserInput askUser() {
ChooseDialog dialog = new ChooseDialog(getProject(), getMessage(), getTitle(), getIcon(), myChoises, myDefaultChoice, getOptions(), getDefaultOption());
dialog.setValidator(null);
JComboBox comboBox = dialog.getComboBox();
comboBox.setEditable(false);
comboBox.setSelectedItem(myDefaultChoice);
dialog.show();
Object selectedItem = comboBox.getSelectedItem();
return new UserInput(selectedItem != null ? selectedItem.toString() : null, dialog.getExitCode());
}
}
public static class UserInput {
private final int mySelectedOption;
private final String myInput;
public UserInput(String choice, int option) {
mySelectedOption = option;
myInput = choice;
}
public String getInput() {
return myInput;
}
public int getSelectedOption() {
return mySelectedOption;
}
}
public static class InputInfo extends BaseInputInfo<InputInfo> {
private String myDefaultValue;
public InputInfo(Project project) {
super(project);
setOptions(new String[]{CommonBundle.getOkButtonText(), CommonBundle.getCancelButtonText()}, 0);
}
@Override
public UserInput askUser() {
InputDialog dialog = new InputDialog(getProject(), getMessage(), getTitle(), getIcon(), myDefaultValue, null, getOptions(), getDefaultOption());
dialog.show();
return new UserInput(dialog.getTextField().getText(), dialog.getExitCode());
}
@NotNull
@Override
public InputInfo getThis() {
return this;
}
public void setDefaultValue(String defaultValue) {
myDefaultValue = defaultValue;
}
}
public abstract static class BaseInputInfo<ThisClass extends BaseInputInfo> extends BaseDialogInfo<ThisClass> {
public BaseInputInfo(Project project) {
super(project);
}
public String forceUserInput() {
setOptions(new String[]{CommonBundle.getOkButtonText()}, 0);
return askUser().getInput();
}
public abstract UserInput askUser();
}
}