blob: 6ed3936dcacd749abf54a4415eb698ff159a068f [file] [log] [blame]
package org.zmlx.hg4idea.ui;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.openapi.vfs.VirtualFile;
import org.zmlx.hg4idea.HgProjectSettings;
import org.zmlx.hg4idea.HgVcsMessages;
import org.zmlx.hg4idea.util.HgUtil;
import java.awt.event.ActionListener;
import java.util.HashSet;
import java.util.Set;
/**
* HgSetExecutablePathPanel is a {@link com.intellij.openapi.ui.TextFieldWithBrowseButton}, which opens a file chooser for hg executable
* and checks validity of the selected file to be an hg executable.
*/
class HgSetExecutablePathPanel extends TextFieldWithBrowseButton {
private final Set<ActionListener> myOkListeners = new HashSet<ActionListener>();
HgSetExecutablePathPanel(final HgProjectSettings projectSettings) {
FileChooserDescriptor descriptor = new FileChooserDescriptor(true, false, false, false, false, false) {
public void validateSelectedFiles(VirtualFile[] files) throws Exception {
String path = files[0].getPath();
if (!HgUtil.isExecutableValid(path)) {
throw new ConfigurationException(HgVcsMessages.message("hg4idea.configuration.executable.error", path));
}
for (ActionListener okListener : myOkListeners) {
okListener.actionPerformed(null);
}
}
};
addBrowseFolderListener(HgVcsMessages.message("hg4idea.configuration.title"), HgVcsMessages.message("hg4idea.configuration.description"), null, descriptor);
}
/**
* Adds a listener which will be called when file chooser dialog is closed successfully.
*/
void addOKListener(ActionListener listener) {
myOkListeners.add(listener);
}
}