diff options
2 files changed, 28 insertions, 0 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/NewSubTaskAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/NewSubTaskAction.java index cf8a099cd..d18cd28bb 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/NewSubTaskAction.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/NewSubTaskAction.java @@ -22,9 +22,12 @@ import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.wizard.IWizard; +import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.mylyn.commons.core.ICoreRunnable; import org.eclipse.mylyn.commons.core.StatusHandler; import org.eclipse.mylyn.commons.ui.CommonUiUtil; +import org.eclipse.mylyn.commons.workbench.WorkbenchUtil; import org.eclipse.mylyn.internal.tasks.core.AbstractTask; import org.eclipse.mylyn.internal.tasks.core.LocalRepositoryConnector; import org.eclipse.mylyn.internal.tasks.core.LocalTask; @@ -38,6 +41,7 @@ import org.eclipse.mylyn.tasks.core.TaskRepository; import org.eclipse.mylyn.tasks.core.data.AbstractTaskDataHandler; import org.eclipse.mylyn.tasks.core.data.TaskAttributeMapper; import org.eclipse.mylyn.tasks.core.data.TaskData; +import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi; import org.eclipse.mylyn.tasks.ui.TasksUi; import org.eclipse.mylyn.tasks.ui.TasksUiImages; import org.eclipse.mylyn.tasks.ui.TasksUiUtil; @@ -83,6 +87,13 @@ public class NewSubTaskAction extends BaseSelectionListenerAction implements IVi AbstractRepositoryConnector connector = TasksUi.getRepositoryManager().getRepositoryConnector( selectedTask.getConnectorKind()); + IWizard wizard = getNewSubTaskWizard(); + if (wizard != null) { + WizardDialog dialog = new WizardDialog(WorkbenchUtil.getShell(), wizard); + dialog.setBlockOnOpen(true); + dialog.open(); + return; + } TaskData taskData = createTaskData(connector); if (taskData != null) { try { @@ -96,6 +107,13 @@ public class NewSubTaskAction extends BaseSelectionListenerAction implements IVi } } + private IWizard getNewSubTaskWizard() { + TaskRepository repository = TasksUi.getRepositoryManager().getRepository(selectedTask.getConnectorKind(), + selectedTask.getRepositoryUrl()); + AbstractRepositoryConnectorUi connectorUi = TasksUi.getRepositoryConnectorUi(selectedTask.getConnectorKind()); + return connectorUi.getNewSubTaskWizard(repository, selectedTask); + } + private TaskData createTaskData(AbstractRepositoryConnector connector) { final AbstractTaskDataHandler taskDataHandler = connector.getTaskDataHandler(); if (taskDataHandler == null) { diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/AbstractRepositoryConnectorUi.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/AbstractRepositoryConnectorUi.java index bc13109f1..32d16613e 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/AbstractRepositoryConnectorUi.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/AbstractRepositoryConnectorUi.java @@ -102,6 +102,16 @@ public abstract class AbstractRepositoryConnectorUi { public abstract IWizard getNewTaskWizard(@NonNull TaskRepository repository, @Nullable ITaskMapping selection); /** + * Connectors can implement this method if they need to open a wizard dialog before opening a new subtask editor. + * + * @since 3.18 + */ + @Nullable + public IWizard getNewSubTaskWizard(TaskRepository taskRepository, ITask parentTask) { + return null; + } + + /** * Override to return a custom task editor ID. If overriding this method the connector becomes responsible for * showing the additional pages handled by the default task editor. As of Mylyn 2.0M2 these are the Planning and * Context pages. |