Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfbecker2010-03-01 21:44:18 +0000
committerfbecker2010-03-01 21:44:18 +0000
commitf71e3e9e73f3c761b547a906eda1287655be8553 (patch)
treebb015e24027970d8843b33793f4e7f76a5749559 /org.eclipse.mylyn.tasks.ui
parent864f1a68d01f919a723c80b840b420f4fc9374e8 (diff)
downloadorg.eclipse.mylyn.tasks-f71e3e9e73f3c761b547a906eda1287655be8553.tar.gz
org.eclipse.mylyn.tasks-f71e3e9e73f3c761b547a906eda1287655be8553.tar.xz
org.eclipse.mylyn.tasks-f71e3e9e73f3c761b547a906eda1287655be8553.zip
ASSIGNED - bug 303531: [patch] refactor CATEGORY_GRADIENT_DRAWER out of TaskListViewer
https://bugs.eclipse.org/bugs/show_bug.cgi?id=303531
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui')
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/CustomTaskListDecorationDrawer.java8
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/GradientDrawer.java204
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java144
3 files changed, 212 insertions, 144 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/CustomTaskListDecorationDrawer.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/CustomTaskListDecorationDrawer.java
index f10068688..002976ec6 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/CustomTaskListDecorationDrawer.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/CustomTaskListDecorationDrawer.java
@@ -16,7 +16,6 @@ import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.mylyn.context.core.ContextCore;
import org.eclipse.mylyn.internal.provisional.commons.ui.CommonFonts;
import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages;
-import org.eclipse.mylyn.internal.provisional.commons.ui.DelayedRefreshJob;
import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery;
import org.eclipse.mylyn.internal.tasks.core.TaskCategory;
@@ -44,8 +43,6 @@ import org.eclipse.swt.widgets.TreeItem;
*/
public class CustomTaskListDecorationDrawer implements Listener {
- private final DelayedRefreshJob delayedRefreshJob;
-
private final int activationImageOffset;
private final Image taskActive = CommonImages.getImage(TasksUiImages.CONTEXT_ACTIVE);
@@ -73,19 +70,16 @@ public class CustomTaskListDecorationDrawer implements Listener {
if (event.getProperty().equals(ITasksUiPreferenceConstants.USE_STRIKETHROUGH_FOR_COMPLETED)) {
if (event.getNewValue() instanceof Boolean) {
useStrikethroughForCompleted = (Boolean) event.getNewValue();
- delayedRefreshJob.refresh();
}
} else if (event.getProperty().equals(ITasksUiPreferenceConstants.OVERLAYS_INCOMING_TIGHT)) {
if (event.getNewValue() instanceof Boolean) {
synchronizationOverlaid = (Boolean) event.getNewValue();
- delayedRefreshJob.refresh();
}
}
}
};
- CustomTaskListDecorationDrawer(DelayedRefreshJob delayedRefreshJob, int activationImageOffset, boolean focusedMode) {
- this.delayedRefreshJob = delayedRefreshJob;
+ public CustomTaskListDecorationDrawer(int activationImageOffset, boolean focusedMode) {
this.activationImageOffset = activationImageOffset;
this.lastClippingArea = new Rectangle(0, 0, 0, 0);
this.tweakClipping = PlatformUtil.isPaintItemClippingRequired();
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/GradientDrawer.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/GradientDrawer.java
new file mode 100644
index 000000000..10b13dd1b
--- /dev/null
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/GradientDrawer.java
@@ -0,0 +1,204 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Frank Becker 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:
+ * Frank Becker - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.tasks.ui.views;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.mylyn.commons.core.StatusHandler;
+import org.eclipse.mylyn.internal.provisional.commons.ui.CommonThemes;
+import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
+import org.eclipse.mylyn.tasks.core.ITask;
+import org.eclipse.mylyn.tasks.core.ITaskContainer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.graphics.Region;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Scrollable;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.themes.IThemeManager;
+
+public class GradientDrawer {
+
+ private final Listener CATEGORY_GRADIENT_DRAWER = new Listener() {
+ public void handleEvent(Event event) {
+ if (event.item.getData() instanceof ITaskContainer && !(event.item.getData() instanceof ITask)) {
+ Scrollable scrollable = (Scrollable) event.widget;
+ GC gc = event.gc;
+
+ Rectangle area = scrollable.getClientArea();
+ Rectangle rect = event.getBounds();
+
+ /* Paint the selection beyond the end of last column */
+ expandRegion(event, scrollable, gc, area);
+
+ /* Draw Gradient Rectangle */
+ Color oldForeground = gc.getForeground();
+ Color oldBackground = gc.getBackground();
+
+ gc.setForeground(categoryGradientEnd);
+ gc.drawLine(0, rect.y, area.width, rect.y);
+
+ gc.setForeground(categoryGradientStart);
+ gc.setBackground(categoryGradientEnd);
+
+ // gc.setForeground(categoryGradientStart);
+ // gc.setBackground(categoryGradientEnd);
+ // gc.setForeground(new Clr(Display.getCurrent(), 255, 0, 0));
+
+ gc.fillGradientRectangle(0, rect.y + 1, area.width, rect.height, true);
+
+ /* Bottom Line */
+ // gc.setForeground();
+ gc.setForeground(categoryGradientEnd);
+ gc.drawLine(0, rect.y + rect.height - 1, area.width, rect.y + rect.height - 1);
+
+ gc.setForeground(oldForeground);
+ gc.setBackground(oldBackground);
+ /* Mark as Background being handled */
+ event.detail &= ~SWT.BACKGROUND;
+ }
+ }
+
+ private void expandRegion(Event event, Scrollable scrollable, GC gc, Rectangle area) {
+ int columnCount;
+ if (scrollable instanceof Table) {
+ columnCount = ((Table) scrollable).getColumnCount();
+ } else {
+ columnCount = ((Tree) scrollable).getColumnCount();
+ }
+
+ if (event.index == columnCount - 1 || columnCount == 0) {
+ int width = area.x + area.width - event.x;
+ if (width > 0) {
+ Region region = new Region();
+ gc.getClipping(region);
+ region.add(event.x, event.y, width, event.height);
+ gc.setClipping(region);
+ region.dispose();
+ }
+ }
+ }
+ };
+
+ private final IPropertyChangeListener THEME_CHANGE_LISTENER = new IPropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent event) {
+ if (event.getProperty().equals(IThemeManager.CHANGE_CURRENT_THEME)
+ || event.getProperty().equals(CommonThemes.COLOR_SCHEDULED_PAST)
+ || event.getProperty().equals(CommonThemes.COLOR_COMPLETED_TODAY)
+ || event.getProperty().equals(CommonThemes.COLOR_COMPLETED)
+ || event.getProperty().equals(CommonThemes.COLOR_OVERDUE)
+ || event.getProperty().equals(CommonThemes.COLOR_SCHEDULED_TODAY)
+ || event.getProperty().equals(CommonThemes.COLOR_SCHEDULED_PAST)
+ || event.getProperty().equals(CommonThemes.COLOR_SCHEDULED_TODAY)
+ || event.getProperty().equals(CommonThemes.COLOR_SCHEDULED_THIS_WEEK)
+ || event.getProperty().equals(CommonThemes.COLOR_TASK_ACTIVE)
+ || CommonThemes.isCommonTheme(event.getProperty())) {
+ configureGradientColors();
+ }
+ }
+ };
+
+ private boolean gradientListenerAdded = false;
+
+ private final IThemeManager themeManager;
+
+ private Color categoryGradientStart;
+
+ private Color categoryGradientEnd;
+
+ private final TreeViewer treeViewer;
+
+ public GradientDrawer(IThemeManager theThemeManager, TreeViewer treeViewer) {
+ this.themeManager = theThemeManager;
+ this.treeViewer = treeViewer;
+ treeViewer.getControl().addDisposeListener(new DisposeListener() {
+
+ public void widgetDisposed(DisposeEvent e) {
+ if (themeManager != null) {
+ themeManager.removePropertyChangeListener(THEME_CHANGE_LISTENER);
+ }
+ }
+ });
+ configureGradientColors();
+ themeManager.addPropertyChangeListener(THEME_CHANGE_LISTENER);
+ }
+
+ private void configureGradientColors() {
+ categoryGradientStart = themeManager.getCurrentTheme().getColorRegistry().get(
+ CommonThemes.COLOR_CATEGORY_GRADIENT_START);
+ categoryGradientEnd = themeManager.getCurrentTheme().getColorRegistry().get(
+ CommonThemes.COLOR_CATEGORY_GRADIENT_END);
+
+ boolean customized = true;
+ if (categoryGradientStart != null && categoryGradientStart.getRed() == 240
+ && categoryGradientStart.getGreen() == 240 && categoryGradientStart.getBlue() == 240
+ && categoryGradientEnd != null && categoryGradientEnd.getRed() == 220
+ && categoryGradientEnd.getGreen() == 220 && categoryGradientEnd.getBlue() == 220) {
+ customized = false;
+ }
+
+ if (gradientListenerAdded == false && categoryGradientStart != null
+ && !categoryGradientStart.equals(categoryGradientEnd)) {
+ getViewer().getTree().addListener(SWT.EraseItem, CATEGORY_GRADIENT_DRAWER);
+ gradientListenerAdded = true;
+ if (!customized) {
+ // Set parent-based colors
+ Color parentBackground = getViewer().getTree().getParent().getBackground();
+ double GRADIENT_TOP = 1.05;// 1.02;
+ double GRADIENT_BOTTOM = .995;// 1.035;
+
+ int red = Math.min(255, (int) (parentBackground.getRed() * GRADIENT_TOP));
+ int green = Math.min(255, (int) (parentBackground.getGreen() * GRADIENT_TOP));
+ int blue = Math.min(255, (int) (parentBackground.getBlue() * GRADIENT_TOP));
+
+ try {
+ categoryGradientStart = new Color(Display.getDefault(), red, green, blue);
+ } catch (Exception e) {
+ categoryGradientStart = getViewer().getTree().getParent().getBackground();
+ StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Could not set color: " + red //$NON-NLS-1$
+ + ", " + green + ", " + blue, e)); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ red = Math.max(0, (int) (parentBackground.getRed() / GRADIENT_BOTTOM));
+ green = Math.max(0, (int) (parentBackground.getGreen() / GRADIENT_BOTTOM));
+ blue = Math.max(0, (int) (parentBackground.getBlue() / GRADIENT_BOTTOM));
+ if (red > 255) {
+ red = 255;
+ }
+ try {
+ categoryGradientEnd = new Color(Display.getDefault(), red, green, blue);
+ } catch (Exception e) {
+ categoryGradientStart = getViewer().getTree().getParent().getBackground();
+ StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Could not set color: " + red //$NON-NLS-1$
+ + ", " + green + ", " + blue, e)); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ }
+ } else if (categoryGradientStart != null && categoryGradientStart.equals(categoryGradientEnd)) {
+ getViewer().getTree().removeListener(SWT.EraseItem, CATEGORY_GRADIENT_DRAWER);
+ gradientListenerAdded = false;
+ }
+ }
+
+ public TreeViewer getViewer() {
+ return treeViewer;
+ }
+
+}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java
index 82325e15b..6d68829fd 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java
@@ -127,18 +127,11 @@ import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.graphics.Region;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.Scrollable;
-import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
@@ -389,14 +382,10 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener, I
private TaskListSorter tableSorter;
- private Color categoryGradientStart;
-
- private Color categoryGradientEnd;
+ private TaskListViewActionGroup actionGroup;
private CustomTaskListDecorationDrawer customDrawer;
- private TaskListViewActionGroup actionGroup;
-
private final IPageListener PAGE_LISTENER = new IPageListener() {
public void pageActivated(IWorkbenchPage page) {
filteredTree.indicateActiveTaskWorkingSet();
@@ -420,69 +409,6 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener, I
*/
protected boolean isPaused = false;
- private final Listener CATEGORY_GRADIENT_DRAWER = new Listener() {
- public void handleEvent(Event event) {
- if (event.item.getData() instanceof ITaskContainer && !(event.item.getData() instanceof ITask)) {
- Scrollable scrollable = (Scrollable) event.widget;
- GC gc = event.gc;
-
- Rectangle area = scrollable.getClientArea();
- Rectangle rect = event.getBounds();
-
- /* Paint the selection beyond the end of last column */
- expandRegion(event, scrollable, gc, area);
-
- /* Draw Gradient Rectangle */
- Color oldForeground = gc.getForeground();
- Color oldBackground = gc.getBackground();
-
- gc.setForeground(categoryGradientEnd);
- gc.drawLine(0, rect.y, area.width, rect.y);
-
- gc.setForeground(categoryGradientStart);
- gc.setBackground(categoryGradientEnd);
-
- // gc.setForeground(categoryGradientStart);
- // gc.setBackground(categoryGradientEnd);
- // gc.setForeground(new Clr(Display.getCurrent(), 255, 0, 0));
-
- gc.fillGradientRectangle(0, rect.y + 1, area.width, rect.height, true);
-
- /* Bottom Line */
- // gc.setForeground();
- gc.setForeground(categoryGradientEnd);
- gc.drawLine(0, rect.y + rect.height - 1, area.width, rect.y + rect.height - 1);
-
- gc.setForeground(oldForeground);
- gc.setBackground(oldBackground);
- /* Mark as Background being handled */
- event.detail &= ~SWT.BACKGROUND;
- }
- }
-
- private void expandRegion(Event event, Scrollable scrollable, GC gc, Rectangle area) {
- int columnCount;
- if (scrollable instanceof Table) {
- columnCount = ((Table) scrollable).getColumnCount();
- } else {
- columnCount = ((Tree) scrollable).getColumnCount();
- }
-
- if (event.index == columnCount - 1 || columnCount == 0) {
- int width = area.x + area.width - event.x;
- if (width > 0) {
- Region region = new Region();
- gc.getClipping(region);
- region.add(event.x, event.y, width, event.height);
- gc.setClipping(region);
- region.dispose();
- }
- }
- }
- };
-
- private boolean gradientListenerAdded = false;
-
private final ITaskActivityListener TASK_ACTIVITY_LISTENER = new TaskActivityAdapter() {
@Override
public void activityReset() {
@@ -573,7 +499,6 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener, I
public void propertyChange(PropertyChangeEvent event) {
if (event.getProperty().equals(IThemeManager.CHANGE_CURRENT_THEME)
|| CommonThemes.isCommonTheme(event.getProperty())) {
- configureGradientColors();
taskListTableLabelProvider.setCategoryBackgroundColor(themeManager.getCurrentTheme()
.getColorRegistry()
.get(CommonThemes.COLOR_CATEGORY));
@@ -587,66 +512,15 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener, I
if (ITasksUiPreferenceConstants.TASK_LIST_TOOL_TIPS_ENABLED.equals(event.getProperty())) {
updateTooltipEnablement();
}
+ if (event.getProperty().equals(ITasksUiPreferenceConstants.USE_STRIKETHROUGH_FOR_COMPLETED)
+ || event.getProperty().equals(ITasksUiPreferenceConstants.OVERLAYS_INCOMING_TIGHT)) {
+ refreshJob.refresh();
+ }
}
};
private TaskListToolTip taskListToolTip;
- private void configureGradientColors() {
- categoryGradientStart = themeManager.getCurrentTheme().getColorRegistry().get(
- CommonThemes.COLOR_CATEGORY_GRADIENT_START);
- categoryGradientEnd = themeManager.getCurrentTheme().getColorRegistry().get(
- CommonThemes.COLOR_CATEGORY_GRADIENT_END);
-
- boolean customized = true;
- if (categoryGradientStart != null && categoryGradientStart.getRed() == 240
- && categoryGradientStart.getGreen() == 240 && categoryGradientStart.getBlue() == 240
- && categoryGradientEnd != null && categoryGradientEnd.getRed() == 220
- && categoryGradientEnd.getGreen() == 220 && categoryGradientEnd.getBlue() == 220) {
- customized = false;
- }
-
- if (gradientListenerAdded == false && categoryGradientStart != null
- && !categoryGradientStart.equals(categoryGradientEnd)) {
- getViewer().getTree().addListener(SWT.EraseItem, CATEGORY_GRADIENT_DRAWER);
- gradientListenerAdded = true;
- if (!customized) {
- // Set parent-based colors
- Color parentBackground = getViewer().getTree().getParent().getBackground();
- double GRADIENT_TOP = 1.05;// 1.02;
- double GRADIENT_BOTTOM = .995;// 1.035;
-
- int red = Math.min(255, (int) (parentBackground.getRed() * GRADIENT_TOP));
- int green = Math.min(255, (int) (parentBackground.getGreen() * GRADIENT_TOP));
- int blue = Math.min(255, (int) (parentBackground.getBlue() * GRADIENT_TOP));
-
- try {
- categoryGradientStart = new Color(Display.getDefault(), red, green, blue);
- } catch (Exception e) {
- categoryGradientStart = getViewer().getTree().getParent().getBackground();
- StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Could not set color: " + red //$NON-NLS-1$
- + ", " + green + ", " + blue, e)); //$NON-NLS-1$ //$NON-NLS-2$
- }
- red = Math.max(0, (int) (parentBackground.getRed() / GRADIENT_BOTTOM));
- green = Math.max(0, (int) (parentBackground.getGreen() / GRADIENT_BOTTOM));
- blue = Math.max(0, (int) (parentBackground.getBlue() / GRADIENT_BOTTOM));
- if (red > 255) {
- red = 255;
- }
- try {
- categoryGradientEnd = new Color(Display.getDefault(), red, green, blue);
- } catch (Exception e) {
- categoryGradientStart = getViewer().getTree().getParent().getBackground();
- StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Could not set color: " + red //$NON-NLS-1$
- + ", " + green + ", " + blue, e)); //$NON-NLS-1$ //$NON-NLS-2$
- }
- }
- } else if (categoryGradientStart != null && categoryGradientStart.equals(categoryGradientEnd)) {
- getViewer().getTree().removeListener(SWT.EraseItem, CATEGORY_GRADIENT_DRAWER);
- gradientListenerAdded = false;
- }
- }
-
public static TaskListView getFromActivePerspective() {
if (PlatformUI.isWorkbenchRunning()) {
IWorkbenchWindow activeWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
@@ -694,10 +568,6 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener, I
if (editorListener != null) {
getSite().getPage().removePartListener(editorListener);
}
-
- customDrawer.dispose();
- categoryGradientStart.dispose();
- categoryGradientEnd.dispose();
}
private void updateDescription() {
@@ -917,7 +787,7 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener, I
getViewer().setInput(getViewSite());
final int activationImageOffset = PlatformUtil.getTreeImageOffset();
- customDrawer = new CustomTaskListDecorationDrawer(refreshJob, activationImageOffset, focusedMode);
+ customDrawer = new CustomTaskListDecorationDrawer(activationImageOffset, false);
getViewer().getTree().addListener(SWT.EraseItem, customDrawer);
getViewer().getTree().addListener(SWT.PaintItem, customDrawer);
@@ -1016,7 +886,7 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener, I
contributeToActionBars();
initHandlers();
- configureGradientColors();
+ new GradientDrawer(themeManager, getViewer());
initDragAndDrop(parent);
expandToActiveTasks();

Back to the top