popup to choose path variables for working directory @ run configurations

This commit is contained in:
Alexey Pegov
2010-02-05 16:49:20 +03:00
parent a38ae136fb
commit a394229a67
3 changed files with 65 additions and 29 deletions
@@ -1,18 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.intellij.execution.junit2.configuration.CommonJavaParameters">
<grid id="d88e6" binding="myWholePanel" row-count="3" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="10">
<grid id="d88e6" binding="myWholePanel" layout-manager="GridLayoutManager" row-count="3" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="10">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<xy x="64" y="62" width="431" height="137"/>
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3"/>
<xy x="64" y="62" width="431" height="136"/>
</constraints>
<properties/>
<border type="none"/>
<children>
<component id="6e486" class="com.intellij.openapi.ui.LabeledComponent" binding="myVMParameters">
<constraints>
<xy x="0" y="9" width="431" height="16"/>
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1">
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false">
<minimum-size width="0" height="-1"/>
<preferred-size width="400" height="-1"/>
</grid>
@@ -24,8 +22,7 @@
</component>
<component id="acecf" class="com.intellij.openapi.ui.LabeledComponent" binding="myProgramParameters">
<constraints>
<xy x="0" y="53" width="431" height="16"/>
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1">
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false">
<minimum-size width="0" height="-1"/>
<preferred-size width="400" height="-1"/>
</grid>
@@ -35,18 +32,13 @@
<text resource-bundle="messages/ExecutionBundle" key="junit.configuration.test.runner.parameters.label"/>
</properties>
</component>
<component id="8c18f" class="com.intellij.openapi.ui.LabeledComponent" binding="myWorkingDirectory">
<component id="689d0" class="com.intellij.openapi.ui.LabeledComponent" binding="myWorkingDirectoryComponent" custom-create="true">
<constraints>
<xy x="0" y="94" width="431" height="36"/>
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1">
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false">
<minimum-size width="0" height="-1"/>
</grid>
</constraints>
<properties>
<componentClass value="com.intellij.openapi.ui.TextFieldWithBrowseButton"/>
<opaque value="true"/>
<text resource-bundle="messages/ExecutionBundle" key="junit.configuration.working.directory.label"/>
</properties>
<properties/>
</component>
</children>
</grid>
@@ -18,13 +18,18 @@ package com.intellij.execution.junit2.configuration;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.RunJavaConfiguration;
import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.application.PathMacros;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileChooser.FileChooser;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.ui.FixedSizeButton;
import com.intellij.openapi.ui.LabeledComponent;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.openapi.ui.popup.JBPopup;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.RawCommandLineEditor;
@@ -32,9 +37,14 @@ import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
public class CommonJavaParameters extends JPanel {
private static final Logger LOG = Logger.getInstance("#com.intellij.execution.junit2.configuration.CommonJavaParameters");
private static final Icon ICON = IconLoader.getIcon("/runConfigurations/variables.png");
private static final int[] ourProperties = new int[]{
RunJavaConfiguration.PROGRAM_PARAMETERS_PROPERTY,
RunJavaConfiguration.VM_PARAMETERS_PROPERTY,
@@ -42,33 +52,24 @@ public class CommonJavaParameters extends JPanel {
};
private JPanel myWholePanel;
private LabeledComponent<TextFieldWithBrowseButton> myWorkingDirectory;
private LabeledComponent<RawCommandLineEditor> myProgramParameters;
private LabeledComponent<RawCommandLineEditor> myVMParameters;
private LabeledComponent<JPanel> myWorkingDirectoryComponent;
private final LabeledComponent[] myFields = new LabeledComponent[3];
private Module myModule = null;
private JButton myVariablesButton;
private TextFieldWithBrowseButton myWorkingDirectoryField;
public CommonJavaParameters() {
super(new BorderLayout());
add(myWholePanel, BorderLayout.CENTER);
copyDialogCaption(myProgramParameters);
copyDialogCaption(myVMParameters);
myWorkingDirectory.getComponent()
.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
FileChooserDescriptor fileChooserDescriptor = FileChooserDescriptorFactory.createSingleFolderDescriptor();
fileChooserDescriptor.setTitle(ExecutionBundle.message("select.working.directory.message"));
fileChooserDescriptor.putUserData(LangDataKeys.MODULE_CONTEXT, myModule);
VirtualFile[] files = FileChooser.chooseFiles(myWorkingDirectory, fileChooserDescriptor);
if (files.length != 0) {
setText(RunJavaConfiguration.WORKING_DIRECTORY_PROPERTY, files[0].getPresentableUrl());
}
}
});
myFields[RunJavaConfiguration.PROGRAM_PARAMETERS_PROPERTY] = myProgramParameters;
myFields[RunJavaConfiguration.VM_PARAMETERS_PROPERTY] = myVMParameters;
myFields[RunJavaConfiguration.WORKING_DIRECTORY_PROPERTY] = myWorkingDirectory;
myFields[RunJavaConfiguration.WORKING_DIRECTORY_PROPERTY] = myWorkingDirectoryComponent;
}
private static void copyDialogCaption(final LabeledComponent<RawCommandLineEditor> component) {
@@ -104,6 +105,8 @@ public class CommonJavaParameters extends JPanel {
((TextFieldWithBrowseButton)component).setText(value);
else if (component instanceof RawCommandLineEditor)
((RawCommandLineEditor)component).setText(value);
else if (component instanceof JPanel)
myWorkingDirectoryField.setText(value);
else LOG.error(component.getClass().getName());
}
@@ -113,6 +116,8 @@ public class CommonJavaParameters extends JPanel {
return ((TextFieldWithBrowseButton)component).getText();
else if (component instanceof RawCommandLineEditor)
return ((RawCommandLineEditor)component).getText();
else if (component instanceof JPanel)
return myWorkingDirectoryField.getText();
else LOG.error(component.getClass().getName());
return "";
}
@@ -124,4 +129,43 @@ public class CommonJavaParameters extends JPanel {
public void setModuleContext(final Module module) {
myModule = module;
}
private void createUIComponents() {
final JPanel panel = new JPanel(new BorderLayout());
myWorkingDirectoryField = new TextFieldWithBrowseButton(new ActionListener() {
public void actionPerformed(ActionEvent e) {
FileChooserDescriptor fileChooserDescriptor = FileChooserDescriptorFactory.createSingleFolderDescriptor();
fileChooserDescriptor.setTitle(ExecutionBundle.message("select.working.directory.message"));
fileChooserDescriptor.putUserData(LangDataKeys.MODULE_CONTEXT, myModule);
VirtualFile[] files = FileChooser.chooseFiles(myWorkingDirectoryComponent, fileChooserDescriptor);
if (files.length != 0) {
setText(RunJavaConfiguration.WORKING_DIRECTORY_PROPERTY, files[0].getPresentableUrl());
}
}
});
panel.add(myWorkingDirectoryField, BorderLayout.CENTER);
final FixedSizeButton button = new FixedSizeButton(myWorkingDirectoryField);
button.setIcon(ICON);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
final List<String> macros = new ArrayList<String>(PathMacros.getInstance().getUserMacroNames());
macros.add("MODULE_DIR");
final JList list = new JList(macros.toArray(new String[macros.size()]));
final JBPopup popup = JBPopupFactory.getInstance().createListPopupBuilder(list).setItemChoosenCallback(new Runnable() {
public void run() {
final Object value = list.getSelectedValue();
if (value instanceof String) {
setText(RunJavaConfiguration.WORKING_DIRECTORY_PROPERTY, "$" + value + "$");
}
}
}).setMovable(false).setResizable(false).createPopup();
popup.showUnderneathOf(button);
}
});
panel.add(button, BorderLayout.EAST);
myWorkingDirectoryComponent = LabeledComponent.create(panel, "&Working directory");
}
}