diff --git a/plugins/tasks/tasks-api/src/com/intellij/tasks/ui/TaskDialogPanel.java b/plugins/tasks/tasks-api/src/com/intellij/tasks/ui/TaskDialogPanel.java
index 0b5a4c6cafcd..380bee48dc2e 100644
--- a/plugins/tasks/tasks-api/src/com/intellij/tasks/ui/TaskDialogPanel.java
+++ b/plugins/tasks/tasks-api/src/com/intellij/tasks/ui/TaskDialogPanel.java
@@ -16,6 +16,7 @@
package com.intellij.tasks.ui;
import com.intellij.openapi.ui.ValidationInfo;
+import com.intellij.tasks.Task;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -26,10 +27,6 @@ import javax.swing.*;
*/
public abstract class TaskDialogPanel {
- //@NotNull
- //@Nls(capitalization = Nls.Capitalization.Title)
- //public abstract String getName();
- //
@NotNull
public abstract JComponent getPanel();
@@ -40,4 +37,6 @@ public abstract class TaskDialogPanel {
public ValidationInfo validate() { return null; }
public abstract void commit();
+
+ public void taskNameChanged(Task oldTask, Task newTask) {}
}
diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.form b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.form
index e394ecd95cb6..fc7b1119e380 100644
--- a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.form
+++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.form
@@ -3,12 +3,12 @@
-
+
-
+
@@ -21,21 +21,15 @@
+
-
+
-
+
-
-
-
-
-
-
-
-
+
diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.java
index 9cbf99b5a3d6..9aab9fd29ae1 100644
--- a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.java
+++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/OpenTaskDialog.java
@@ -25,17 +25,21 @@ import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.ui.ValidationInfo;
import com.intellij.tasks.*;
+import com.intellij.tasks.impl.LocalTaskImpl;
import com.intellij.tasks.impl.TaskManagerImpl;
import com.intellij.tasks.impl.TaskStateCombo;
import com.intellij.tasks.impl.TaskUtil;
import com.intellij.tasks.ui.TaskDialogPanel;
import com.intellij.tasks.ui.TaskDialogPanelProvider;
+import com.intellij.ui.DocumentAdapter;
import com.intellij.ui.components.JBCheckBox;
+import com.intellij.ui.components.JBTextField;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
+import javax.swing.event.DocumentEvent;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Collection;
@@ -51,22 +55,23 @@ public class OpenTaskDialog extends DialogWrapper {
private JPanel myPanel;
@BindControl(value = "clearContext", instant = true)
private JCheckBox myClearContext;
- private JLabel myTaskNameLabel;
private JBCheckBox myUpdateState;
private TaskStateCombo myTaskStateCombo;
private JPanel myAdditionalPanel;
+ private JBTextField myNameField;
private final Project myProject;
- private final Task myTask;
+ private final LocalTaskImpl myTask;
private final List myPanels;
public OpenTaskDialog(@NotNull final Project project, @NotNull final Task task) {
super(project, false);
- myProject = project;
- myTask = task;
setTitle("Open Task");
- myTaskNameLabel.setText(TaskUtil.getTrimmedSummary(task));
- myTaskNameLabel.setIcon(task.getIcon());
+
+ myProject = project;
+ myTask = new LocalTaskImpl(task);
+ myNameField.setText(TaskUtil.getTrimmedSummary(task));
+ myNameField.setEnabled(!task.isIssue());
TaskManagerImpl taskManager = (TaskManagerImpl)TaskManager.getManager(myProject);
ControlBinder binder = new ControlBinder(taskManager.getState());
@@ -104,6 +109,16 @@ public class OpenTaskDialog extends DialogWrapper {
for (TaskDialogPanel panel : myPanels) {
myAdditionalPanel.add(panel.getPanel());
}
+ myNameField.getDocument().addDocumentListener(new DocumentAdapter() {
+ @Override
+ protected void textChanged(DocumentEvent e) {
+ LocalTaskImpl oldTask = new LocalTaskImpl(myTask);
+ myTask.setSummary(myNameField.getText());
+ for (TaskDialogPanel panel : myPanels) {
+ panel.taskNameChanged(oldTask, myTask);
+ }
+ }
+ });
init();
}
diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/vcs/VcsOpenTaskPanel.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/vcs/VcsOpenTaskPanel.java
index 2c6514b5ad56..c5640b1e65d6 100644
--- a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/vcs/VcsOpenTaskPanel.java
+++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/vcs/VcsOpenTaskPanel.java
@@ -48,10 +48,10 @@ public class VcsOpenTaskPanel extends TaskDialogPanel {
private JTextField myChangelistName;
private JBCheckBox myCreateBranch;
private JBCheckBox myCreateChangelist;
- private ComboBox myBranchFrom;
+ private ComboBox myBranchFrom;
private JBLabel myFromLabel;
private JBCheckBox myUseBranch;
- private ComboBox myUseBranchCombo;
+ private ComboBox myUseBranchCombo;
private VcsTaskHandler myVcsTaskHandler;
private static final String START_FROM_BRANCH = "start.from.branch";
@@ -102,7 +102,7 @@ public class VcsOpenTaskPanel extends TaskDialogPanel {
//noinspection unchecked
myBranchFrom.setModel(new DefaultComboBoxModel(tasks));
myBranchFrom.setEnabled(true);
- myUseBranchCombo.setModel(new DefaultComboBoxModel(tasks));
+ myUseBranchCombo.setModel(new DefaultComboBoxModel<>(tasks));
final String startFrom = PropertiesComponent.getInstance(project).getValue(START_FROM_BRANCH);
VcsTaskHandler.TaskInfo info = null;
if (startFrom != null) {
@@ -130,13 +130,22 @@ public class VcsOpenTaskPanel extends TaskDialogPanel {
myBranchFrom.setRenderer(new TaskInfoCellRenderer(myBranchFrom));
myUseBranchCombo.setRenderer(new TaskInfoCellRenderer(myUseBranchCombo));
}
- myBranchName.setText(myVcsTaskHandler != null
- ? myVcsTaskHandler.cleanUpBranchName(myTaskManager.constructDefaultBranchName(task))
- : myTaskManager.suggestBranchName(task));
- myChangelistName.setText(myTaskManager.getChangelistName(task));
+ myBranchName.setText(getBranchName(task));
+ myChangelistName.setText(getChangelistName(task));
updateFields(true);
}
+ private String getChangelistName(Task task) {
+ return myTaskManager.getChangelistName(task);
+ }
+
+ @NotNull
+ private String getBranchName(Task task) {
+ return myVcsTaskHandler != null
+ ? myVcsTaskHandler.cleanUpBranchName(myTaskManager.constructDefaultBranchName(task))
+ : myTaskManager.suggestBranchName(task);
+ }
+
private void updateFields(boolean initial) {
if (!initial && myBranchFrom.getItemCount() == 0 && myCreateBranch.isSelected()) {
Messages.showWarningDialog(myPanel, "Can't create branch if no commit exists.\nCreate a commit first.", "Cannot Create Branch");
@@ -229,6 +238,16 @@ public class VcsOpenTaskPanel extends TaskDialogPanel {
return null;
}
+ @Override
+ public void taskNameChanged(Task oldTask, Task newTask) {
+ if (getBranchName(oldTask).equals(myBranchName.getText())) {
+ myBranchName.setText(getBranchName(newTask));
+ }
+ if (getChangelistName(oldTask).equals(myChangelistName.getText())) {
+ myChangelistName.setText(getChangelistName(newTask));
+ }
+ }
+
private static class TaskInfoCellRenderer extends ColoredListCellRenderer {
public TaskInfoCellRenderer(ComboBox from) {
super(from);