package com.robonobo.gui.components;
import static com.robonobo.common.util.TextUtil.*;
import java.util.HashSet;
import java.util.Set;
import javax.swing.Icon;
import javax.swing.SwingUtilities;
import com.robonobo.common.concurrent.CatchingRunnable;
import com.robonobo.core.api.Task;
import com.robonobo.core.api.TaskListener;
import com.robonobo.gui.RoboColor;
import com.robonobo.gui.frames.RobonoboFrame;
import com.robonobo.gui.panels.LeftSidebar;
@SuppressWarnings("serial")
public class TaskListSelector extends LeftSidebarSelector implements TaskListener {
static Icon runningIcon = new SpinnerIcon(16, 2, RoboColor.BLUE_GRAY);
Set<Task> tasks = new HashSet<Task>();
public TaskListSelector(LeftSidebar sideBar, RobonoboFrame frame) {
super(sideBar, frame, "0 tasks running", true, runningIcon, "tasklist");
frame.ctrl.addTaskListener(this);
}
@Override
public void taskUpdated(final Task t) {
SwingUtilities.invokeLater(new CatchingRunnable() {
public void doRun() throws Exception {
synchronized (TaskListSelector.this) {
if ((t.getCompletion() - 1f) == 0f)
tasks.remove(t);
else
tasks.add(t);
setText(numItems(tasks, "Task") + " running");
sideBar.showTaskList(tasks.size() > 0);
}
}
});
}
}