IDEA-236390 Implement new UI for editing run configuration settings

added macro support

GitOrigin-RevId: 40ad3fe0c0192ef703d3c41d1ae27652a2422e9d
This commit is contained in:
Dmitry Avdeev
2020-05-14 14:04:55 +00:00
committed by intellij-monorepo-bot
parent 9839f7af62
commit 2b7beb9973
4 changed files with 45 additions and 16 deletions
@@ -4,8 +4,10 @@ package com.intellij.execution.application;
import com.intellij.application.options.ModuleDescriptionsComboBox;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.ui.*;
import com.intellij.ide.macro.MacrosDialog;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.LabeledComponent;
import com.intellij.openapi.util.Computable;
import com.intellij.ui.EditorTextField;
import com.intellij.ui.RawCommandLineEditor;
@@ -26,11 +28,15 @@ public class JavaApplicationSettingsEditor extends RunConfigurationFragmentedEdi
@Override
protected Collection<SettingsEditorFragment<ApplicationConfiguration, ?>> createFragments() {
List<SettingsEditorFragment<ApplicationConfiguration, ?>> fragments = new ArrayList<>();
fragments.add(CommonTags.parallelRun());
fragments.add(CommonParameterFragments.createRedirectFragment());
fragments.addAll(new CommonParameterFragments<ApplicationConfiguration>(myProject).getFragments());
SettingsEditorFragment<ApplicationConfiguration, LabeledComponent<ModuleDescriptionsComboBox>> moduleClasspath = CommonJavaFragments.moduleClasspath(myProject);
Computable<Boolean> hasModule = () -> moduleClasspath.component().getComponent().getSelectedModule() != null;
fragments.add(CommonTags.parallelRun());
fragments.add(CommonParameterFragments.createRedirectFragment(hasModule));
CommonParameterFragments<ApplicationConfiguration> commonParameterFragments = new CommonParameterFragments<>(myProject, hasModule);
fragments.addAll(commonParameterFragments.getFragments());
fragments.add(CommonJavaFragments.createBuildBeforeRun());
fragments.add(CommonJavaFragments.createEnvParameters());
@@ -38,7 +44,9 @@ public class JavaApplicationSettingsEditor extends RunConfigurationFragmentedEdi
jrePathEditor.getLabel().setVisible(false);
jrePathEditor.setDefaultJreSelector(DefaultJreSelector.projectSdk(myProject));
LabeledComponent<RawCommandLineEditor> vmParams = LabeledComponent.create(new RawCommandLineEditor(),
RawCommandLineEditor commandLineEditor = new RawCommandLineEditor();
MacrosDialog.addMacroSupport(commandLineEditor.getEditorField(), MacrosDialog.Filters.ALL, hasModule);
LabeledComponent<RawCommandLineEditor> vmParams = LabeledComponent.create(commandLineEditor,
ExecutionBundle.message("run.configuration.java.vm.parameters.label"));
vmParams.setLabelLocation(BorderLayout.WEST);
String group = ExecutionBundle.message("group.java.options");
@@ -4,13 +4,16 @@ package com.intellij.execution.ui;
import com.intellij.execution.CommonProgramRunConfigurationParameters;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.InputRedirectAware;
import com.intellij.ide.macro.MacrosDialog;
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.LabeledComponent;
import com.intellij.openapi.ui.TextComponentAccessor;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.ui.RawCommandLineEditor;
import com.intellij.ui.components.fields.ExtendableTextField;
import org.jetbrains.annotations.NotNull;
import java.awt.*;
@@ -23,9 +26,10 @@ public class CommonParameterFragments<Settings extends CommonProgramRunConfigura
private final List<SettingsEditorFragment<Settings, ?>> myFragments = new ArrayList<>();
public CommonParameterFragments(@NotNull Project project) {
public CommonParameterFragments(@NotNull Project project, Computable<Boolean> hasModule) {
RawCommandLineEditor commandLineEditor = new RawCommandLineEditor();
commandLineEditor.getEditorField().getEmptyText().setText(ExecutionBundle.message("run.configuration.program.hint"));
MacrosDialog.addMacroSupport(commandLineEditor.getEditorField(), MacrosDialog.Filters.ALL, hasModule);
myFragments.add(new SettingsEditorFragment<>("commandLineParameters", null, null, commandLineEditor,
100,
(settings, component) -> component.setText(settings.getProgramParameters()),
@@ -37,6 +41,7 @@ public class CommonParameterFragments<Settings extends CommonProgramRunConfigura
project,
FileChooserDescriptorFactory.createSingleFolderDescriptor(),
TextComponentAccessor.TEXT_FIELD_WHOLE_TEXT);
MacrosDialog.addMacroSupport((ExtendableTextField)workingDirectoryField.getTextField(), MacrosDialog.Filters.DIRECTORY_PATH, hasModule);
LabeledComponent<TextFieldWithBrowseButton> field = LabeledComponent.create(workingDirectoryField,
ExecutionBundle.message(
"run.configuration.working.directory.label"));
@@ -51,12 +56,13 @@ public class CommonParameterFragments<Settings extends CommonProgramRunConfigura
return myFragments;
}
public static <S extends InputRedirectAware> SettingsEditorFragment<S, ?> createRedirectFragment() {
public static <S extends InputRedirectAware> SettingsEditorFragment<S, ?> createRedirectFragment(Computable<Boolean> hasModule) {
TextFieldWithBrowseButton inputFile = new TextFieldWithBrowseButton();
inputFile.addBrowseFolderListener(null, null, null,
FileChooserDescriptorFactory.createSingleFileDescriptor(),
TextComponentAccessor.TEXT_FIELD_WHOLE_TEXT);
MacrosDialog.addMacroSupport((ExtendableTextField)inputFile.getTextField(), MacrosDialog.Filters.ALL, hasModule);
LabeledComponent<TextFieldWithBrowseButton> labeledComponent =
LabeledComponent.create(inputFile, ExecutionBundle.message("redirect.input.from"));
labeledComponent.setLabelLocation(BorderLayout.WEST);
@@ -10,7 +10,6 @@ import com.intellij.icons.AllIcons;
import com.intellij.ide.macro.EditorMacro;
import com.intellij.ide.macro.Macro;
import com.intellij.ide.macro.MacrosDialog;
import com.intellij.openapi.application.PathMacros;
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
@@ -26,13 +25,11 @@ import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.model.serialization.PathMacroUtil;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
@@ -179,13 +176,7 @@ public class CommonProgramParametersPanel extends JPanel implements PanelWithAnc
}
protected @NotNull Map<String, String> getPathMacros() {
final HashMap<String, String> macros = new HashMap<>(PathMacros.getInstance().getUserMacros());
if (myModuleContext != null || myHasModuleMacro) {
macros.put(PathMacroUtil.MODULE_DIR_MACRO_NAME, PathMacros.getInstance().getValue(PathMacroUtil.MODULE_DIR_MACRO_NAME));
macros.put(ProgramParametersConfigurator.MODULE_WORKING_DIR,
PathMacros.getInstance().getValue(PathMacroUtil.MODULE_WORKING_DIR_NAME));
}
return macros;
return MacrosDialog.getPathMacros(myModuleContext != null || myHasModuleMacro);
}
protected void copyDialogCaption(final LabeledComponent<RawCommandLineEditor> component) {
@@ -2,13 +2,16 @@
package com.intellij.ide.macro;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.util.ProgramParametersConfigurator;
import com.intellij.icons.AllIcons;
import com.intellij.ide.DataManager;
import com.intellij.ide.IdeBundle;
import com.intellij.openapi.actionSystem.impl.SimpleDataContext;
import com.intellij.openapi.application.PathMacros;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.popup.ListItemDescriptorAdapter;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.ui.DoubleClickListener;
@@ -23,6 +26,7 @@ import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.JBUI;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.model.serialization.PathMacroUtil;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
@@ -32,6 +36,7 @@ import javax.swing.text.JTextComponent;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
@@ -68,6 +73,14 @@ public final class MacrosDialog extends DialogWrapper {
() -> show(textField, macroFilter, userMacros)));
}
public static void addMacroSupport(@NotNull ExtendableTextField textField,
@NotNull Predicate<? super Macro> macroFilter,
Computable<Boolean> hasModule) {
textField.addExtension(ExtendableTextComponent.Extension.create(
AllIcons.General.InlineAdd, AllIcons.General.InlineAddHover, ExecutionBundle.message("insert.macros"),
() -> show(textField, macroFilter, getPathMacros(hasModule.compute()))));
}
public static void show(@NotNull JTextComponent textComponent) {
show(textComponent, Filters.ALL, null);
}
@@ -223,6 +236,17 @@ public final class MacrosDialog extends DialogWrapper {
return panel;
}
@NotNull
public static HashMap<String, String> getPathMacros(boolean addModuleMacros) {
final HashMap<String, String> macros = new HashMap<>(PathMacros.getInstance().getUserMacros());
if (addModuleMacros) {
macros.put(PathMacroUtil.MODULE_DIR_MACRO_NAME, PathMacros.getInstance().getValue(PathMacroUtil.MODULE_DIR_MACRO_NAME));
macros.put(ProgramParametersConfigurator.MODULE_WORKING_DIR,
PathMacros.getInstance().getValue(PathMacroUtil.MODULE_WORKING_DIR_NAME));
}
return macros;
}
/**
* Macro info shown in list
*/