diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.form b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.form
index 5e3784cb08d4..c3b2d1907107 100644
--- a/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.form
+++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.form
@@ -42,74 +42,18 @@
-
-
+
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.java
index a28cc76295e2..c94215d3b25f 100644
--- a/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.java
+++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.java
@@ -21,20 +21,23 @@ import com.intellij.lang.ant.config.AntConfiguration;
import com.intellij.lang.ant.config.impl.BuildFileProperty;
import com.intellij.lang.ant.config.impl.TargetChooserDialog;
import com.intellij.lang.ant.config.impl.configuration.UIPropertyBinding;
+import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.ui.FixedSizeButton;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.packaging.ui.ArtifactEditorContext;
import com.intellij.packaging.ui.ArtifactPropertiesEditor;
+import com.intellij.ui.*;
import com.intellij.ui.table.JBTable;
-import com.intellij.util.NewInstanceFactory;
import com.intellij.util.config.ListProperty;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.ColumnInfo;
+import com.intellij.util.ui.ListTableModel;
import com.intellij.util.ui.UIUtil;
import javax.swing.*;
+import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
@@ -45,32 +48,34 @@ import java.util.List;
*/
public class AntArtifactPropertiesEditor extends ArtifactPropertiesEditor {
private static final ListProperty ANT_PROPERTIES = ListProperty.create("ant-properties");
- private static final ColumnInfo NAME_COLUMN = new ColumnInfo(AntBundle.message("edit.ant.properties.name.column.name")) {
- public String valueOf(BuildFileProperty buildFileProperty) {
- return buildFileProperty.getPropertyName();
- }
+ private static final ColumnInfo NAME_COLUMN =
+ new ColumnInfo(AntBundle.message("edit.ant.properties.name.column.name")) {
+ public String valueOf(BuildFileProperty buildFileProperty) {
+ return buildFileProperty.getPropertyName();
+ }
- public boolean isCellEditable(BuildFileProperty buildFileProperty) {
- return USER_PROPERTY_CONDITION.value(buildFileProperty);
- }
+ public boolean isCellEditable(BuildFileProperty buildFileProperty) {
+ return USER_PROPERTY_CONDITION.value(buildFileProperty);
+ }
- public void setValue(BuildFileProperty buildFileProperty, String name) {
- buildFileProperty.setPropertyName(name);
- }
- };
- private static final ColumnInfo VALUE_COLUMN = new ColumnInfo(AntBundle.message("edit.ant.properties.value.column.name")) {
- public boolean isCellEditable(BuildFileProperty buildFileProperty) {
- return USER_PROPERTY_CONDITION.value(buildFileProperty);
- }
+ public void setValue(BuildFileProperty buildFileProperty, String name) {
+ buildFileProperty.setPropertyName(name);
+ }
+ };
+ private static final ColumnInfo VALUE_COLUMN =
+ new ColumnInfo(AntBundle.message("edit.ant.properties.value.column.name")) {
+ public boolean isCellEditable(BuildFileProperty buildFileProperty) {
+ return USER_PROPERTY_CONDITION.value(buildFileProperty);
+ }
- public String valueOf(BuildFileProperty buildFileProperty) {
- return buildFileProperty.getPropertyValue();
- }
+ public String valueOf(BuildFileProperty buildFileProperty) {
+ return buildFileProperty.getPropertyValue();
+ }
- public void setValue(BuildFileProperty buildFileProperty, String value) {
- buildFileProperty.setPropertyValue(value);
- }
- };
+ public void setValue(BuildFileProperty buildFileProperty, String value) {
+ buildFileProperty.setPropertyValue(value);
+ }
+ };
private static final ColumnInfo[] PROPERTY_COLUMNS = new ColumnInfo[]{NAME_COLUMN, VALUE_COLUMN};
private static final Condition USER_PROPERTY_CONDITION = new Condition() {
@Override
@@ -84,8 +89,6 @@ public class AntArtifactPropertiesEditor extends ArtifactPropertiesEditor {
private JCheckBox myRunTargetCheckBox;
private FixedSizeButton mySelectTargetButton;
private JBTable myPropertiesTable;
- private JButton myAddButton;
- private JButton myRemoveButton;
private JPanel myPropertiesPanel;
private AntBuildTarget myTarget;
private final boolean myPostProcessing;
@@ -111,10 +114,59 @@ public class AntArtifactPropertiesEditor extends ArtifactPropertiesEditor {
}
});
+ myPropertiesTable = new JBTable();
UIPropertyBinding.Composite binding = new UIPropertyBinding.Composite();
myBinding = binding.bindList(myPropertiesTable, PROPERTY_COLUMNS, ANT_PROPERTIES);
- myBinding.addAddFacility(myAddButton, NewInstanceFactory.fromClass(BuildFileProperty.class));
- myBinding.addRemoveFacility(myRemoveButton, USER_PROPERTY_CONDITION);
+ myPropertiesPanel.add(
+ ToolbarDecorator.createDecorator(myPropertiesTable)
+ .setAddAction(new AnActionButtonRunnable() {
+ @Override
+ public void run(AnActionButton button) {
+ ListTableModel model = (ListTableModel)myPropertiesTable.getModel();
+ if (myPropertiesTable.isEditing() && !myPropertiesTable.getCellEditor().stopCellEditing()) {
+ return;
+ }
+ BuildFileProperty item = new BuildFileProperty();
+ ArrayList items = new ArrayList(model.getItems());
+ items.add(item);
+ model.setItems(items);
+ int newIndex = model.indexOf(item);
+ ListSelectionModel selectionModel = myPropertiesTable.getSelectionModel();
+ selectionModel.clearSelection();
+ selectionModel.setSelectionInterval(newIndex, newIndex);
+ ColumnInfo[] columns = model.getColumnInfos();
+ for (int i = 0; i < columns.length; i++) {
+ ColumnInfo column = columns[i];
+ if (column.isCellEditable(item)) {
+ myPropertiesTable.requestFocusInWindow();
+ myPropertiesTable.editCellAt(newIndex, i);
+ break;
+ }
+ }
+ }
+ }).setRemoveAction(new AnActionButtonRunnable() {
+ @Override
+ public void run(AnActionButton button) {
+ TableUtil.removeSelectedItems(myPropertiesTable);
+ }
+ }).setRemoveActionUpdater(new AnActionButtonUpdater() {
+ @Override
+ public boolean isEnabled(AnActionEvent e) {
+ final ListSelectionModel selectionModel = myPropertiesTable.getSelectionModel();
+ ListTableModel model = (ListTableModel)myPropertiesTable.getModel();
+ boolean enable = false;
+ if (!selectionModel.isSelectionEmpty()) {
+ enable = true;
+ for (int i : myPropertiesTable.getSelectedRows()) {
+ if (AntArtifactProperties.isPredefinedProperty(model.getItems().get(i).getPropertyName())) {
+ enable = false;
+ break;
+ }
+ }
+ }
+ return enable;
+ }
+ }).disableUpDownActions().createPanel(), BorderLayout.CENTER);
}
private void selectTarget() {
@@ -135,9 +187,6 @@ public class AntArtifactPropertiesEditor extends ArtifactPropertiesEditor {
}
final boolean enabled = myTarget != null && myRunTargetCheckBox.isSelected();
UIUtil.setEnabled(myPropertiesPanel, enabled, true);
- if (enabled) {
- myBinding.updateRemoveButton(myRemoveButton, USER_PROPERTY_CONDITION);
- }
}
public String getTabName() {