mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-236390 Implement new UI for editing run configuration settings
added macro support GitOrigin-RevId: 40ad3fe0c0192ef703d3c41d1ae27652a2422e9d
This commit is contained in:
committed by
intellij-monorepo-bot
parent
9839f7af62
commit
2b7beb9973
+12
-4
@@ -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);
|
||||
|
||||
+1
-10
@@ -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
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user