package jetbrains.mps.ide.devkit.newDevkitDialog;
/*Generated by MPS */
import com.intellij.openapi.ui.DialogWrapper;
import javax.swing.JPanel;
import javax.swing.JTextField;
import jetbrains.mps.project.MPSProject;
import jetbrains.mps.project.DevKit;
import com.intellij.openapi.project.Project;
import jetbrains.mps.ide.project.ProjectHelper;
import org.jetbrains.annotations.Nullable;
import javax.swing.JComponent;
import com.intellij.ui.components.panels.VerticalLayout;
import javax.swing.JLabel;
import com.intellij.ui.DocumentAdapter;
import javax.swing.event.DocumentEvent;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
import com.intellij.ui.InsertPathAction;
import com.intellij.ide.util.BrowseFilesListener;
import com.intellij.ui.FieldPanel;
import com.intellij.openapi.util.EmptyRunnable;
import com.intellij.openapi.fileChooser.FileChooserFactory;
import jetbrains.mps.ide.newSolutionDialog.NewModuleUtil;
import jetbrains.mps.project.MPSExtentions;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
import java.io.File;
public class NewDevKitDialog extends DialogWrapper {
private JPanel myContentPane;
private JTextField myDevkitLocation;
private JTextField myDevkitName;
private MPSProject myProject;
private DevKit myResult;
private boolean myDevkitLocationChangedByUser = false;
private boolean myDevkitLocationDocListenerEnabled = true;
public NewDevKitDialog(Project project) {
super(project);
setTitle("New Devkit");
setOKButtonText("&OK");
setCancelButtonText("Ca&ncel");
myProject = ProjectHelper.fromIdeaProject(project);
createMainComponent();
init();
}
@Nullable
protected JComponent createCenterPanel() {
return myContentPane;
}
private void createMainComponent() {
myContentPane = new JPanel(new VerticalLayout(5));
myContentPane.add(new JLabel("Name"));
myContentPane.add(myDevkitName = new JTextField("NewDevkit"));
myDevkitName.getDocument().addDocumentListener(new DocumentAdapter() {
protected void textChanged(DocumentEvent p0) {
if (!(myDevkitLocationChangedByUser)) {
setDevkitLocation(generateDevkitPath());
}
check();
}
});
myDevkitLocation = new JTextField(generateDevkitPath());
myDevkitLocation.getDocument().addDocumentListener(new DocumentAdapter() {
protected void textChanged(DocumentEvent p0) {
if (myDevkitLocationDocListenerEnabled) {
myDevkitLocationChangedByUser = true;
check();
}
}
});
final FileChooserDescriptor descriptor = FileChooserDescriptorFactory.createSingleFolderDescriptor();
InsertPathAction.addTo(myDevkitLocation, descriptor);
BrowseFilesListener listener = new BrowseFilesListener(myDevkitLocation, "Choose Devkit Location Folder", "", descriptor);
FieldPanel fieldPanel = new FieldPanel(myDevkitLocation, "Devkit location:", null, listener, EmptyRunnable.getInstance());
FileChooserFactory.getInstance().installFileCompletion(fieldPanel.getTextField(), descriptor, false, myProject.getProject());
myContentPane.add(fieldPanel);
check();
// Testing stuff
myDevkitName.setName("Name");
myDevkitLocation.setName("Path");
}
@Nullable
@Override
public JComponent getPreferredFocusedComponent() {
return myDevkitName;
}
private void check() {
setErrorText(NewModuleUtil.check(myProject.getRepository(), MPSExtentions.DOT_DEVKIT, getDevkitName(), getDevkitLocation()));
}
@Override
protected void doOKAction() {
final String devkitName = getDevkitName();
final String devkitLocation = getDevkitLocation();
super.doOKAction();
NewModuleUtil.runModuleCreation(myProject, new _FunctionTypes._void_P0_E0() {
public void invoke() {
myResult = NewModuleUtil.createDevKit(devkitName, devkitLocation, myProject);
}
});
}
public DevKit getResult() {
return this.myResult;
}
private String getDevkitName() {
return myDevkitName.getText().trim();
}
private String getDevkitLocation() {
return myDevkitLocation.getText().trim();
}
private void setDevkitLocation(String devkitLocation) {
myDevkitLocationDocListenerEnabled = false;
myDevkitLocation.setText(devkitLocation);
myDevkitLocationDocListenerEnabled = true;
}
private String generateDevkitPath() {
return myProject.getProject().getBasePath() + File.separator + "devkits" + File.separator + getDevkitName();
}
}