/******************************************************************************* * Copyright (c) 2004, 2011 Tasktop Technologies and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Tasktop Technologies - initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.internal.tasks.ui.views; import java.util.Arrays; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.viewers.ICellModifier; import org.eclipse.mylyn.commons.core.StatusHandler; import org.eclipse.mylyn.internal.tasks.core.AbstractTask; import org.eclipse.mylyn.internal.tasks.core.AbstractTaskCategory; import org.eclipse.mylyn.internal.tasks.core.AbstractTaskContainer; import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal; import org.eclipse.mylyn.tasks.core.IRepositoryElement; import org.eclipse.mylyn.tasks.core.IRepositoryQuery; import org.eclipse.mylyn.tasks.ui.TasksUi; import org.eclipse.mylyn.tasks.ui.TasksUiUtil; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.widgets.TreeItem; /** * @author Mik Kersten */ class TaskListCellModifier implements ICellModifier { private final TaskListView taskListView; private boolean disableActivateForParentTasks = false; TaskListCellModifier(TaskListView taskListView) { this.taskListView = taskListView; if (SWT.getPlatform().equals("gtk")) { //$NON-NLS-1$ disableActivateForParentTasks = true; } } public boolean canModify(Object element, String property) { return taskListView.isInRenameAction; } public Object getValue(Object element, String property) { try { int columnIndex = Arrays.asList(this.taskListView.columnNames).indexOf(property); if (element instanceof IRepositoryElement) { final IRepositoryElement taskListElement = (IRepositoryElement) element; switch (columnIndex) { case 0: return taskListElement.getSummary(); case 1: return ""; //$NON-NLS-1$ case 2: return ""; //$NON-NLS-1$ } } } catch (Exception e) { StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, e.getMessage(), e)); } return ""; //$NON-NLS-1$ } public void modify(Object element, String property, Object value) { if (element instanceof TreeItem && ((TreeItem) element).isDisposed()) { return; } int columnIndex = Arrays.asList(this.taskListView.columnNames).indexOf(property); Object data = ((TreeItem) element).getData(); if (data instanceof AbstractTask) { AbstractTask task = (AbstractTask) data; switch (columnIndex) { case 0: if (task != null) { task.setSummary(((String) value).trim()); TasksUiPlugin.getTaskList().notifyElementChanged(task); } break; case 1: break; case 2: toggleTaskActivation((TreeItem) element, null); break; } } else if (data instanceof AbstractTaskCategory || data instanceof IRepositoryQuery) { AbstractTaskContainer container = (AbstractTaskContainer) data; switch (columnIndex) { case 0: TasksUiPlugin.getTaskList().renameContainer(container, ((String) value).trim()); case 1: break; case 2: break; } } // XXX trigger a full refresh to ensure correct sorting this.taskListView.refresh(); } public void toggleTaskActivation(TreeItem element, MouseEvent event) { AbstractTask task = null; if (element.getData() instanceof AbstractTask) { task = (AbstractTask) element.getData(); if (disableActivateForParentTasks) { // check if activation column overlaps with tree expander control: element is on second hierarchy level and has children TreeItem parent = element.getParentItem(); if (parent != null && (parent.getData() instanceof IRepositoryQuery || parent.getData() instanceof AbstractTaskCategory) && element.getItemCount() > 0) { return; } } if (task.isActive()) { TasksUi.getTaskActivityManager().deactivateTask(task); } else { TasksUiInternal.activateTaskThroughCommand(task); if ((event.stateMask & SWT.SHIFT) != 0 || event.button == 2) { TasksUiUtil.openTask(task); } } } } }