3c3ed235454afcec61fd46314c0797a70777a193
[idea/community.git] / plugins / tasks / tasks-core / src / com / intellij / tasks / generic / ManageTemplateVariablesDialog.java
1 package com.intellij.tasks.generic;
2
3 import com.intellij.execution.util.ListTableWithButtons;
4 import com.intellij.openapi.ui.DialogWrapper;
5 import com.intellij.util.ui.AbstractTableCellEditor;
6 import com.intellij.util.ui.ColumnInfo;
7 import com.intellij.util.ui.ListTableModel;
8 import org.jetbrains.annotations.NotNull;
9 import org.jetbrains.annotations.Nullable;
10
11 import javax.swing.*;
12 import javax.swing.table.TableCellEditor;
13 import javax.swing.table.TableCellRenderer;
14 import java.awt.*;
15 import java.util.List;
16
17 /**
18  * User: evgeny.zakrevsky
19  * Date: 10/26/12
20  */
21 public class ManageTemplateVariablesDialog extends DialogWrapper {
22   private final TemplateVariablesTable myTemplateVariableTable;
23
24   protected ManageTemplateVariablesDialog(@NotNull final Component parent) {
25     super(parent, true);
26     myTemplateVariableTable = new TemplateVariablesTable();
27     setTitle("Template Variables");
28     init();
29   }
30
31   public void setTemplateVariables(List<TemplateVariable> list) {
32     myTemplateVariableTable.setValues(list);
33   }
34
35   public List<TemplateVariable> getTemplateVariables() {
36     return myTemplateVariableTable.getTemplateVariables();
37   }
38
39   @Nullable
40   @Override
41   protected JComponent createCenterPanel() {
42     return myTemplateVariableTable.getComponent();
43   }
44
45   private static class TemplateVariablesTable extends ListTableWithButtons<TemplateVariable> {
46     @Override
47     protected ListTableModel createListModel() {
48       final ColumnInfo name = new ElementsColumnInfoBase<TemplateVariable>("Name") {
49         @Nullable
50         @Override
51         protected String getDescription(final TemplateVariable templateVariable) {
52           return templateVariable.getDescription();
53         }
54
55         @Nullable
56         @Override
57         public String valueOf(final TemplateVariable templateVariable) {
58           return templateVariable.getName();
59         }
60
61         @Override
62         public boolean isCellEditable(TemplateVariable templateVariable) {
63           return !templateVariable.isReadOnly();
64         }
65
66         @Override
67         public void setValue(TemplateVariable templateVariable, String s) {
68           if (s.equals(valueOf(templateVariable))) {
69             return;
70           }
71           templateVariable.setName(s);
72           setModified();
73         }
74       };
75
76       final ColumnInfo value = new ElementsColumnInfoBase<TemplateVariable>("Value") {
77         @Nullable
78         @Override
79         public String valueOf(TemplateVariable templateVariable) {
80           return templateVariable.getValue();
81         }
82
83         @Override
84         public boolean isCellEditable(TemplateVariable templateVariable) {
85           return !templateVariable.isReadOnly();
86         }
87
88         @Override
89         public void setValue(TemplateVariable templateVariable, String s) {
90           templateVariable.setValue(s);
91           setModified();
92         }
93
94         @Override
95         public TableCellRenderer getRenderer(TemplateVariable variable) {
96           if (variable.isHidden()) {
97             return new TableCellRenderer() {
98               @Override
99               public Component getTableCellRendererComponent(JTable table,
100                                                              Object value,
101                                                              boolean isSelected,
102                                                              boolean hasFocus,
103                                                              int row,
104                                                              int column) {
105                 return new JPasswordField(value.toString());
106               }
107             };
108           }
109           return super.getRenderer(variable);
110         }
111
112         @Nullable
113         @Override
114         public TableCellEditor getEditor(final TemplateVariable variable) {
115           if (variable.isHidden()) {
116             return new AbstractTableCellEditor() {
117               private JPasswordField myPasswordField;
118               @Override
119               public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
120                 myPasswordField = new JPasswordField(variable.getValue());
121                 return myPasswordField;
122               }
123
124               @Override
125               public Object getCellEditorValue() {
126                 return myPasswordField.getText();
127               }
128             };
129           }
130           return super.getEditor(variable);
131         }
132
133         @Nullable
134         @Override
135         protected String getDescription(TemplateVariable templateVariable) {
136           return templateVariable.getDescription();
137         }
138       };
139
140       final ColumnInfo isShownOnFirstTab = new ColumnInfo<TemplateVariable, Boolean>("Show on first tab") {
141         @Nullable
142         @Override
143         public Boolean valueOf(TemplateVariable o) {
144           return o.isShownOnFirstTab();
145         }
146
147         @Override
148         public void setValue(TemplateVariable variable, Boolean value) {
149           variable.setShownOnFirstTab(value);
150           setModified();
151         }
152
153         @Override
154         public Class getColumnClass() {
155           return Boolean.class;
156         }
157
158         @Override
159         public boolean isCellEditable(TemplateVariable variable) {
160           return !variable.isReadOnly();
161         }
162
163         @Nullable
164         @Override
165         public String getTooltipText() {
166           return "Whether this template variable will be shown in 'General tab'";
167         }
168       };
169
170       final ColumnInfo isHidden = new ColumnInfo<TemplateVariable, Boolean>("Hide") {
171         @Nullable
172         @Override
173         public Boolean valueOf(TemplateVariable o) {
174           return o.isHidden();
175         }
176
177         @Override
178         public void setValue(TemplateVariable variable, Boolean value) {
179           variable.setHidden(value);
180           setModified();
181           // value column editor may be changed
182           TemplateVariablesTable.this.refreshValues();
183         }
184
185         @Override
186         public Class getColumnClass() {
187           return Boolean.class;
188         }
189
190         @Override
191         public boolean isCellEditable(TemplateVariable variable) {
192           return !variable.isReadOnly();
193         }
194
195         @Nullable
196         @Override
197         public String getTooltipText() {
198           return "Whether this template variable will be hidden like password field";
199         }
200       };
201       return new ListTableModel((new ColumnInfo[]{name, value, isShownOnFirstTab, isHidden}));
202     }
203
204     @Override
205     protected TemplateVariable createElement() {
206       return new TemplateVariable("", "");
207     }
208
209     @Override
210     protected TemplateVariable cloneElement(final TemplateVariable variable) {
211       return variable.clone();
212     }
213
214     @Override
215     protected boolean canDeleteElement(final TemplateVariable selection) {
216       return true;
217     }
218
219     public List<TemplateVariable> getTemplateVariables() {
220       return getElements();
221     }
222   }
223 }