/******************************************************************************* * Copyright (c) 2004, 2014 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 * Robert Munteanu - fix for bug #377081 *******************************************************************************/ package org.eclipse.mylyn.internal.tasks.ui.editors; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.mylyn.tasks.core.data.TaskAttribute; import org.eclipse.mylyn.tasks.core.data.TaskAttributeMetaData; import org.eclipse.mylyn.tasks.ui.editors.AbstractAttributeEditor; import org.eclipse.mylyn.tasks.ui.editors.AbstractTaskEditorPart; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; /** * @author Steffen Pingel */ public class TaskEditorPeoplePart extends AbstractTaskEditorPart { private static final int COLUMN_MARGIN = 5; public TaskEditorPeoplePart() { setPartName(Messages.TaskEditorPeoplePart_People); } protected void addAttribute(Composite composite, FormToolkit toolkit, TaskAttribute attribute) { AbstractAttributeEditor editor = createAttributeEditor(attribute); if (editor != null) { editor.createLabelControl(composite, toolkit); GridDataFactory.defaultsFor(editor.getLabelControl()) .indent(COLUMN_MARGIN, 0) .applyTo(editor.getLabelControl()); editor.createControl(composite, toolkit); getTaskEditorPage().getAttributeEditorToolkit().adapt(editor); GridDataFactory dataFactory = createLayoutData(editor); dataFactory.applyTo(editor.getControl()); } } protected GridDataFactory createLayoutData(AbstractAttributeEditor editor) { GridDataFactory gridDataFactory = GridDataFactory.fillDefaults() .grab(true, false) .align(SWT.FILL, SWT.TOP) .indent(3, 0);// prevent clipping of decorators on Mac if (editor instanceof MultiSelectionAttributeEditor) { gridDataFactory.hint(SWT.DEFAULT, 95); } return gridDataFactory; } @Override public void createControl(Composite parent, FormToolkit toolkit) { Section section = createSection(parent, toolkit, true); Composite peopleComposite = toolkit.createComposite(section); GridLayout layout = EditorUtil.createSectionClientLayout(); layout.numColumns = 2; peopleComposite.setLayout(layout); createAttributeEditors(toolkit, peopleComposite); toolkit.paintBordersFor(peopleComposite); section.setClient(peopleComposite); setSection(toolkit, section); } protected void createAttributeEditors(FormToolkit toolkit, Composite peopleComposite) { Collection<TaskAttribute> attributes = getAttributes(); for (TaskAttribute attribute : attributes) { addAttribute(peopleComposite, toolkit, attribute); } } protected Collection<TaskAttribute> getAttributes() { Map<String, TaskAttribute> allAttributes = getTaskData().getRoot().getAttributes(); List<TaskAttribute> attributes = new ArrayList<TaskAttribute>(allAttributes.size()); attributes.add(getTaskData().getRoot().getMappedAttribute(TaskAttribute.USER_ASSIGNED)); attributes.add(getTaskData().getRoot().getMappedAttribute(TaskAttribute.USER_REPORTER)); attributes.add(getTaskData().getRoot().getMappedAttribute(TaskAttribute.ADD_SELF_CC)); attributes.add(getTaskData().getRoot().getMappedAttribute(TaskAttribute.USER_CC)); for (TaskAttribute attribute : allAttributes.values()) { TaskAttributeMetaData properties = attribute.getMetaData(); if (TaskAttribute.KIND_PEOPLE.equals(properties.getKind())) { if (!attributes.contains(attribute)) { attributes.add(attribute); } } } return attributes; } }