IDEA-177702 The dialog that comes up in response to "Create New Task" should allow the user to en...

This commit is contained in:
Dmitry Avdeev
2017-10-03 15:06:14 +03:00
parent 5ae2c35983
commit 6f06345c4a
4 changed files with 56 additions and 29 deletions
@@ -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) {}
}
@@ -3,12 +3,12 @@
<grid id="27dc6" binding="myPanel" layout-manager="GridLayoutManager" row-count="3" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<xy x="20" y="20" width="461" height="130"/>
<xy x="20" y="20" width="461" height="134"/>
</constraints>
<properties/>
<border type="none"/>
<children>
<grid id="29a80" layout-manager="GridLayoutManager" row-count="1" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<grid id="29a80" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="5" left="0" bottom="10" right="0"/>
<constraints>
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="1" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
@@ -21,21 +21,15 @@
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<labelFor value="ff158"/>
<text value="Name:"/>
</properties>
</component>
<hspacer id="b92e0">
<component id="ff158" class="com.intellij.ui.components.JBTextField" binding="myNameField">
<constraints>
<grid row="0" column="2" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
</constraints>
</hspacer>
<component id="e8faa" class="javax.swing.JLabel" binding="myTaskNameLabel">
<constraints>
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<text value="Task description"/>
</properties>
<properties/>
</component>
</children>
</grid>
@@ -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<TaskDialogPanel> 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();
}
@@ -48,10 +48,10 @@ public class VcsOpenTaskPanel extends TaskDialogPanel {
private JTextField myChangelistName;
private JBCheckBox myCreateBranch;
private JBCheckBox myCreateChangelist;
private ComboBox myBranchFrom;
private ComboBox<VcsTaskHandler.TaskInfo> myBranchFrom;
private JBLabel myFromLabel;
private JBCheckBox myUseBranch;
private ComboBox myUseBranchCombo;
private ComboBox<VcsTaskHandler.TaskInfo> 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<VcsTaskHandler.TaskInfo> {
public TaskInfoCellRenderer(ComboBox from) {
super(from);