From 6f06345c4a3b95a8a50d898a9f243270eedbd20f Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Tue, 3 Oct 2017 15:03:34 +0300 Subject: [PATCH] IDEA-177702 The dialog that comes up in response to "Create New Task" should allow the user to en... --- .../intellij/tasks/ui/TaskDialogPanel.java | 7 ++-- .../tasks/actions/OpenTaskDialog.form | 18 ++++------ .../tasks/actions/OpenTaskDialog.java | 27 +++++++++++---- .../tasks/actions/vcs/VcsOpenTaskPanel.java | 33 +++++++++++++++---- 4 files changed, 56 insertions(+), 29 deletions(-) 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);