diff --git a/plugins/tasks/tasks-api/src/com/intellij/tasks/TaskManager.java b/plugins/tasks/tasks-api/src/com/intellij/tasks/TaskManager.java index 60c02f0e09c8..f1ffb5153225 100644 --- a/plugins/tasks/tasks-api/src/com/intellij/tasks/TaskManager.java +++ b/plugins/tasks/tasks-api/src/com/intellij/tasks/TaskManager.java @@ -114,4 +114,8 @@ public abstract class TaskManager { public abstract boolean isTimeTrackingAutoMode(); public abstract void setTimeTrackingAutoMode(final boolean state); + + public abstract boolean isHideClosedTasks(); + + public abstract void setHideClosedTasks(final boolean state); } diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/GotoTaskAction.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/GotoTaskAction.java index 25b7638d624a..36a9ac857b2a 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/GotoTaskAction.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/actions/GotoTaskAction.java @@ -1,5 +1,6 @@ package com.intellij.tasks.actions; +import com.intellij.icons.AllIcons; import com.intellij.ide.actions.GotoActionBase; import com.intellij.ide.util.gotoByName.ChooseByNameBase; import com.intellij.ide.util.gotoByName.ChooseByNameItemProvider; @@ -19,6 +20,7 @@ import com.intellij.tasks.impl.TaskManagerImpl; import com.intellij.tasks.impl.TaskUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.Function; +import com.intellij.util.IconUtil; import com.intellij.util.Processor; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; @@ -35,6 +37,7 @@ public class GotoTaskAction extends GotoActionBase { public GotoTaskAction() { getTemplatePresentation().setText("Open Task..."); + getTemplatePresentation().setIcon(IconUtil.getAddIcon()); } @Override diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java index 83c414f3453a..4ae95617113c 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java @@ -745,6 +745,16 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe getState().isTimeTrackingAutoMode = state; } + @Override + public boolean isHideClosedTasks() { + return getState().hideClosedTasks; + } + + @Override + public void setHideClosedTasks(final boolean state) { + getState().hideClosedTasks = state; + } + private static LocalTaskImpl createDefaultTask() { return new LocalTaskImpl(LocalTaskImpl.DEFAULT_TASK_ID, "Default task"); } @@ -987,6 +997,7 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe public boolean enableTimeTracking = true; public int timeTrackingSuspendDelayInSeconds = 600; public boolean isTimeTrackingAutoMode = true; + public boolean hideClosedTasks = true; } private abstract class TestConnectionTask extends com.intellij.openapi.progress.Task.Modal { diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/timetracking/TasksToolWindowPanel.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/timetracking/TasksToolWindowPanel.java index 5d63609d77be..6cf70f051b61 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/timetracking/TasksToolWindowPanel.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/timetracking/TasksToolWindowPanel.java @@ -11,12 +11,15 @@ import com.intellij.openapi.util.IconLoader; import com.intellij.tasks.LocalTask; import com.intellij.tasks.TaskListenerAdapter; import com.intellij.tasks.TaskManager; +import com.intellij.tasks.actions.GotoTaskAction; +import com.intellij.tasks.actions.SwitchTaskAction; import com.intellij.tasks.impl.TaskManagerImpl; import com.intellij.ui.LayeredIcon; import com.intellij.ui.ScrollPaneFactory; import com.intellij.ui.SimpleColoredComponent; import com.intellij.ui.SimpleTextAttributes; import com.intellij.ui.table.TableView; +import com.intellij.util.IconUtil; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.text.DateFormatUtil; import com.intellij.util.ui.ColumnInfo; @@ -40,17 +43,20 @@ public class TasksToolWindowPanel extends SimpleToolWindowPanel implements Dispo private final ListTableModel myTableModel; private final TaskManager myTaskManager; + private final Project myProject; private Timer myTimer; + private final TableView myTable; public TasksToolWindowPanel(final Project project, final boolean vertical) { super(vertical); + myProject = project; myTaskManager = TaskManager.getManager(project); - final TableView table = new TableView(createListModel()); - myTableModel = table.getListTableModel(); + myTable = new TableView(createListModel()); + myTableModel = myTable.getListTableModel(); updateTable(); - setContent(ScrollPaneFactory.createScrollPane(table, true)); + setContent(ScrollPaneFactory.createScrollPane(myTable, true)); setToolbar(createToolbar()); myTaskManager.addTaskListener(new TaskListenerAdapter() { @@ -78,7 +84,7 @@ public class TasksToolWindowPanel extends SimpleToolWindowPanel implements Dispo myTimer = new Timer(TaskManagerImpl.TIME_TRACKING_TIME_UNIT, new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { - table.repaint(); + myTable.repaint(); } }); myTimer.start(); @@ -105,6 +111,26 @@ public class TasksToolWindowPanel extends SimpleToolWindowPanel implements Dispo private JComponent createToolbar() { DefaultActionGroup group = new DefaultActionGroup(); + group.add(new GotoTaskAction()); + group.add(new AnAction("Remove Task", "Remove Task", IconUtil.getRemoveIcon()) { + @Override + public void actionPerformed(final AnActionEvent e) { + for (LocalTask localTask : myTable.getSelectedObjects()) { + SwitchTaskAction.removeTask(myProject, localTask, myTaskManager); + } + } + }); + group.add(new ToggleAction("Hide closed tasks", "Hide closed tasks", AllIcons.Actions.Checked) { + @Override + public boolean isSelected(final AnActionEvent e) { + return myTaskManager.isHideClosedTasks(); + } + + @Override + public void setSelected(final AnActionEvent e, final boolean state) { + myTaskManager.setHideClosedTasks(state); + } + }); group.add(new ToggleAction("Auto mode", "Automatic starting and stopping of timer", TasksIcons.AutoMode) { @Override public boolean isSelected(final AnActionEvent e) { @@ -114,6 +140,7 @@ public class TasksToolWindowPanel extends SimpleToolWindowPanel implements Dispo @Override public void setSelected(final AnActionEvent e, final boolean state) { myTaskManager.setTimeTrackingAutoMode(state); + updateTable(); } }); group.add(new AnAction() { @@ -153,7 +180,7 @@ public class TasksToolWindowPanel extends SimpleToolWindowPanel implements Dispo } private void updateTable() { - myTableModel.setItems(ContainerUtil.filter(myTaskManager.getLocalTasks(), new Condition() { + myTableModel.setItems(ContainerUtil.filter(myTaskManager.getLocalTasks(myTaskManager.isHideClosedTasks()), new Condition() { @Override public boolean value(final LocalTask task) { return task.isActive() || task.getTimeSpent() != 0;