### Eclipse Workspace Patch 1.0 #P org.eclipse.mylyn.tasks.ui Index: src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorSummaryPart.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorSummaryPart.java,v retrieving revision 1.24 diff -u -r1.24 TaskEditorSummaryPart.java --- src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorSummaryPart.java 11 Apr 2009 17:56:49 -0000 1.24 +++ src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorSummaryPart.java 27 May 2009 17:04:30 -0000 @@ -13,7 +13,9 @@ package org.eclipse.mylyn.internal.tasks.ui.editors; import org.eclipse.jface.layout.GridDataFactory; +import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages; +import org.eclipse.mylyn.internal.provisional.commons.ui.CommonThemes; import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal; import org.eclipse.mylyn.tasks.core.ITaskMapping; import org.eclipse.mylyn.tasks.core.ITask.PriorityLevel; @@ -21,10 +23,20 @@ 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.custom.StyledText; +import org.eclipse.swt.events.FocusAdapter; +import org.eclipse.swt.events.FocusEvent; +import org.eclipse.swt.events.PaintEvent; +import org.eclipse.swt.events.PaintListener; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Font; +import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.forms.widgets.FormToolkit; /** @@ -39,6 +51,8 @@ private AbstractAttributeEditor summaryEditor; + private Font textFont; + public TaskEditorSummaryPart() { setPartName(Messages.TaskEditorSummaryPart_Summary); } @@ -91,32 +105,121 @@ } } + protected Control addAttributeWithIcon(Composite composite, FormToolkit toolkit, TaskAttribute attribute, + boolean forceReadOnly) { + if (attribute != null) { + //can't be added via a factory because these attributes already have a default editor? + AbstractAttributeEditor editor = new SingleSelectionAttributeEditorWithIcon(getModel(), attribute); + if (editor != null) { + editor.setDecorationEnabled(true); + if (forceReadOnly) { + editor.setReadOnly(true); + } + editor.createControl(composite, toolkit); + getTaskEditorPage().getAttributeEditorToolkit().adapt(editor); + } + return editor.getControl(); + } else { + //some connectors don't have priorities. in this case we just show the defalut icon. + //this can't be handled within the attribute editor, as it asserts that the attribute cannot be null + Label imageOnly = toolkit.createLabel(composite, ""); + imageOnly.setImage(CommonImages.getImage(CommonImages.PRIORITY_3_24)); + return imageOnly; + } + } + private boolean isAttribute(TaskAttribute attribute, String id) { return attribute.getId().equals( attribute.getTaskData().getAttributeMapper().mapToRepositoryKey(attribute.getParentAttribute(), id)); } - private void addSummaryText(Composite composite, FormToolkit toolkit) { + private void addSummaryText(Composite composite, final FormToolkit toolkit) { + final boolean completed = getModel().getTask().isCompleted(); + summaryEditor = createAttributeEditor(getTaskData().getRoot().getMappedAttribute(TaskAttribute.SUMMARY)); if (summaryEditor != null) { - summaryEditor.createControl(composite, toolkit); - GridDataFactory.fillDefaults().hint(EditorUtil.MAXIMUM_WIDTH, SWT.DEFAULT).grab(true, false).applyTo( - summaryEditor.getControl()); + //create composite to hold rounded border + final Composite roundedBorder = toolkit.createComposite(composite); + GridLayoutFactory.fillDefaults().margins(4, 6).applyTo(roundedBorder); + GridDataFactory.fillDefaults().align(SWT.FILL, SWT.BEGINNING).hint(EditorUtil.MAXIMUM_WIDTH, 30).grab(true, + false).applyTo(roundedBorder); + + //create editor and set data + summaryEditor.createControl(roundedBorder, toolkit); + final Control summaryControl = summaryEditor.getControl(); + GridDataFactory.fillDefaults() + .align(SWT.FILL, SWT.CENTER) + .hint(EditorUtil.MAXIMUM_WIDTH, SWT.DEFAULT) + .grab(true, false) + .applyTo(summaryControl); + + //set text color, style, size. + final StyledText text = ((RichTextAttributeEditor) summaryEditor).getViewer().getTextWidget(); + setFontSizeAndStyle(composite, text, 11); + Color color = PlatformUI.getWorkbench().getThemeManager().getCurrentTheme().getColorRegistry().get( + CommonThemes.COLOR_COMPLETED); + text.setForeground(color); + + //create rounded border on the composite + roundedBorder.addPaintListener(new PaintListener() { + public void paintControl(PaintEvent e) { + e.gc.setForeground(toolkit.getColors().getBorderColor()); + e.gc.drawRoundRectangle(0, 3, summaryControl.getBounds().width + 5, + summaryControl.getBounds().height + 5, 10, 10); + } + }); getTaskEditorPage().getAttributeEditorToolkit().adapt(summaryEditor); } } + private void setFontSizeAndStyle(Composite composite, StyledText text, int i) { + //TODO: Please review this method + Font initialFont = text.getFont(); + FontData[] fontData = initialFont.getFontData(); + for (FontData element : fontData) { + element.setHeight(i); + element.setStyle(element.getStyle() | SWT.BOLD); + } + textFont = new Font(composite.getDisplay(), fontData); + text.setFont(textFont); + } + + @Override + public void dispose() { + super.dispose(); + if (textFont != null) { + textFont.dispose(); + } + } + @Override public void createControl(Composite parent, FormToolkit toolkit) { Composite composite = toolkit.createComposite(parent); - GridLayout layout = new GridLayout(); + GridLayout layout = new GridLayout(2, false); layout.verticalSpacing = 5; composite.setLayout(layout); + //add priority as an icon + TaskAttribute priorityAttribute = getTaskData().getRoot().getMappedAttribute(TaskAttribute.PRIORITY); + final Control priorityEditor = addAttributeWithIcon(composite, toolkit, priorityAttribute, false); + GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.BEGINNING).applyTo(priorityEditor); + //forward focus to the summary editor + priorityEditor.addFocusListener(new FocusAdapter() { + @Override + public void focusGained(FocusEvent e) { + if (summaryEditor != null && summaryEditor.getControl() != null) { + summaryEditor.getControl().setFocus(); + //only forward it on first view + priorityEditor.removeFocusListener(this); + } + } + }); + addSummaryText(composite, toolkit); if (needsHeader()) { createHeaderLayout(composite, toolkit); + GridDataFactory.fillDefaults().span(2, 1).applyTo(headerComposite); } toolkit.paintBordersFor(composite); @@ -174,6 +277,7 @@ TaskAttribute dateModified = getTaskData().getRoot().getMappedAttribute(TaskAttribute.DATE_MODIFICATION); addAttribute(headerComposite, toolkit, dateModified); + } public boolean needsHeader() {