in web/jscs/src/main/java/com/intellij/lang/javascript/linter/jscs/importer/JscsSchemeImporter.java [70:156]
private Getter<CodeStyleScheme> showOptionsDialog(Project project,
final CodeStyleScheme currentScheme,
final SchemeFactory<CodeStyleScheme> schemeFactory) {
final ComponentWithBrowseButton<ComboBox> presets = JscsView.createPresetWithHelpButton();
final JEditorPane
presetHintComp = JSLinterUtil.createHtmlViewer(JscsBundle.message("jscs.configurable.preset.hint.text"), UIUtil.getTitledBorderFont());
final JPanel presetHint = SwingHelper.wrapWithHorizontalStretch(presetHintComp);
final FormBuilder formBuilder = FormBuilder.createFormBuilder();
final JBTextField schemeName = new JBTextField("JSCS");
final JBRadioButton useCurrent;
if (currentScheme.isDefault()) {
useCurrent = null;
formBuilder.addLabeledComponent(JscsBundle.message("label.create.new.scheme"), schemeName);
} else {
useCurrent = new JBRadioButton(JscsBundle.message("radio.update.current.scheme", currentScheme.getName()));
final JBRadioButton createNew = new JBRadioButton(JscsBundle.message("radio.create.new.scheme"));
final ButtonGroup group = new ButtonGroup();
group.add(useCurrent);
group.add(createNew);
createNew.setSelected(true);
formBuilder.addComponent(useCurrent)
.addLabeledComponent(createNew, schemeName)
.setFormLeftIndent(0)
.addVerticalGap(5);
}
final JscsConfiguration jscsConfiguration = JscsConfiguration.getInstance(project);
final NodeJsInterpreterRef nodePath = jscsConfiguration.getExtendedState().getState().getInterpreterRef();
final NodeModuleConfigurationView configurationView = new NodeModuleConfigurationView(project, "jscs", nodePath);
final NodeJsInterpreterField nodeField = configurationView.getNodeInterpreterField();
final NodePackageField packageField = configurationView.getPackageField();
final NodePackage jscs = NodePackage.findDefaultPackage(project, "jscs", nodePath.resolve(project));
if (jscs != null) packageField.setSelected(jscs);
configurationView.setPreferredWidthToComponents();
formBuilder.addLabeledComponent(NodeJsInterpreterField.getLabelTextForComponent(), nodeField)
.addLabeledComponent(JscsBundle.message("jscs.configurable.label.package.path"), packageField);
formBuilder.addLabeledComponent(JscsBundle.message("jscs.configurable.label.preset.label.text"), presets)
.addLabeledComponent("", presetHint);
final DialogBuilder builder = new DialogBuilder();
builder.setTitle(JscsBundle.message("dialog.title.import.from.jscs.config"));
builder.setNorthPanel(formBuilder.getPanel());
builder.setDimensionServiceKey(JscsSchemeImportWorker.class.getName());
builder.setPreferredFocusComponent(schemeName);
final Alarm alarm = new Alarm(Alarm.ThreadToUse.SWING_THREAD);
try {
final Runnable validation = new Runnable() {
@Override
public void run() {
final DialogWrapper dialogWrapper = builder.getDialogWrapper();
try {
if (dialogWrapper == null) return;
if (presets.getChildComponent().getSelectedItem() != null &&
(StringUtil.isEmptyOrSpaces(packageField.getSelected().getSystemDependentPath()))) {
builder.okActionEnabled(false);
builder.setErrorText(JscsBundle.message("dialog.message.jscs.package.field.should.be.filled.if.preset.selected"), presets);
} else {
builder.okActionEnabled(true);
builder.setErrorText(null);
}
} finally {
if (!alarm.isDisposed()) {
alarm.addRequest(this, 200, true);
}
}
}
};
alarm.addRequest(validation, 200, ModalityState.any());
if (!builder.showAndGet()) return null;
} finally {
alarm.cancelAllRequests();
Disposer.dispose(alarm);
}
myPreset = (JscsPreset)presets.getChildComponent().getSelectedItem();
myPackagePath = packageField.getSelected().getSystemDependentPath();
return () -> {
if (useCurrent != null && useCurrent.isSelected()) return currentScheme;
final String text = schemeName.getText();
return schemeFactory.createNewScheme(StringUtil.isEmptyOrSpaces(text) ? null : text);
};
}