blob: 3c3ed235454afcec61fd46314c0797a70777a193 [file] [log] [blame]
package com.intellij.tasks.generic;
import com.intellij.execution.util.ListTableWithButtons;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.util.ui.AbstractTableCellEditor;
import com.intellij.util.ui.ColumnInfo;
import com.intellij.util.ui.ListTableModel;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import java.awt.*;
import java.util.List;
/**
* User: evgeny.zakrevsky
* Date: 10/26/12
*/
public class ManageTemplateVariablesDialog extends DialogWrapper {
private final TemplateVariablesTable myTemplateVariableTable;
protected ManageTemplateVariablesDialog(@NotNull final Component parent) {
super(parent, true);
myTemplateVariableTable = new TemplateVariablesTable();
setTitle("Template Variables");
init();
}
public void setTemplateVariables(List<TemplateVariable> list) {
myTemplateVariableTable.setValues(list);
}
public List<TemplateVariable> getTemplateVariables() {
return myTemplateVariableTable.getTemplateVariables();
}
@Nullable
@Override
protected JComponent createCenterPanel() {
return myTemplateVariableTable.getComponent();
}
private static class TemplateVariablesTable extends ListTableWithButtons<TemplateVariable> {
@Override
protected ListTableModel createListModel() {
final ColumnInfo name = new ElementsColumnInfoBase<TemplateVariable>("Name") {
@Nullable
@Override
protected String getDescription(final TemplateVariable templateVariable) {
return templateVariable.getDescription();
}
@Nullable
@Override
public String valueOf(final TemplateVariable templateVariable) {
return templateVariable.getName();
}
@Override
public boolean isCellEditable(TemplateVariable templateVariable) {
return !templateVariable.isReadOnly();
}
@Override
public void setValue(TemplateVariable templateVariable, String s) {
if (s.equals(valueOf(templateVariable))) {
return;
}
templateVariable.setName(s);
setModified();
}
};
final ColumnInfo value = new ElementsColumnInfoBase<TemplateVariable>("Value") {
@Nullable
@Override
public String valueOf(TemplateVariable templateVariable) {
return templateVariable.getValue();
}
@Override
public boolean isCellEditable(TemplateVariable templateVariable) {
return !templateVariable.isReadOnly();
}
@Override
public void setValue(TemplateVariable templateVariable, String s) {
templateVariable.setValue(s);
setModified();
}
@Override
public TableCellRenderer getRenderer(TemplateVariable variable) {
if (variable.isHidden()) {
return new TableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
return new JPasswordField(value.toString());
}
};
}
return super.getRenderer(variable);
}
@Nullable
@Override
public TableCellEditor getEditor(final TemplateVariable variable) {
if (variable.isHidden()) {
return new AbstractTableCellEditor() {
private JPasswordField myPasswordField;
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
myPasswordField = new JPasswordField(variable.getValue());
return myPasswordField;
}
@Override
public Object getCellEditorValue() {
return myPasswordField.getText();
}
};
}
return super.getEditor(variable);
}
@Nullable
@Override
protected String getDescription(TemplateVariable templateVariable) {
return templateVariable.getDescription();
}
};
final ColumnInfo isShownOnFirstTab = new ColumnInfo<TemplateVariable, Boolean>("Show on first tab") {
@Nullable
@Override
public Boolean valueOf(TemplateVariable o) {
return o.isShownOnFirstTab();
}
@Override
public void setValue(TemplateVariable variable, Boolean value) {
variable.setShownOnFirstTab(value);
setModified();
}
@Override
public Class getColumnClass() {
return Boolean.class;
}
@Override
public boolean isCellEditable(TemplateVariable variable) {
return !variable.isReadOnly();
}
@Nullable
@Override
public String getTooltipText() {
return "Whether this template variable will be shown in 'General tab'";
}
};
final ColumnInfo isHidden = new ColumnInfo<TemplateVariable, Boolean>("Hide") {
@Nullable
@Override
public Boolean valueOf(TemplateVariable o) {
return o.isHidden();
}
@Override
public void setValue(TemplateVariable variable, Boolean value) {
variable.setHidden(value);
setModified();
// value column editor may be changed
TemplateVariablesTable.this.refreshValues();
}
@Override
public Class getColumnClass() {
return Boolean.class;
}
@Override
public boolean isCellEditable(TemplateVariable variable) {
return !variable.isReadOnly();
}
@Nullable
@Override
public String getTooltipText() {
return "Whether this template variable will be hidden like password field";
}
};
return new ListTableModel((new ColumnInfo[]{name, value, isShownOnFirstTab, isHidden}));
}
@Override
protected TemplateVariable createElement() {
return new TemplateVariable("", "");
}
@Override
protected TemplateVariable cloneElement(final TemplateVariable variable) {
return variable.clone();
}
@Override
protected boolean canDeleteElement(final TemplateVariable selection) {
return true;
}
public List<TemplateVariable> getTemplateVariables() {
return getElements();
}
}
}