diff options
author | relves | 2008-01-25 17:18:10 +0000 |
---|---|---|
committer | relves | 2008-01-25 17:18:10 +0000 |
commit | 88e73172848afe181261a8177711014cec4d144d (patch) | |
tree | 70e391e370c525784cbc2bfd91a6c09afd66a753 /org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn | |
parent | 65b92d9b3eac6e3d32cb3257ee8b4b1fd42731df (diff) | |
download | org.eclipse.mylyn.tasks-88e73172848afe181261a8177711014cec4d144d.tar.gz org.eclipse.mylyn.tasks-88e73172848afe181261a8177711014cec4d144d.tar.xz org.eclipse.mylyn.tasks-88e73172848afe181261a8177711014cec4d144d.zip |
NEW - bug 206566: improve the usability of scheduling and workweek focus and get rid of "red Mondays"
https://bugs.eclipse.org/bugs/show_bug.cgi?id=206566
Diffstat (limited to 'org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn')
4 files changed, 114 insertions, 34 deletions
diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/ScheduledTaskContainer.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/ScheduledTaskContainer.java index 573a536e6..b71a88796 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/ScheduledTaskContainer.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/ScheduledTaskContainer.java @@ -29,6 +29,8 @@ public class ScheduledTaskContainer extends AbstractTaskContainer { private Calendar endDate; + private boolean captureFloating = false; + private TaskActivityManager activityManager; public ScheduledTaskContainer(TaskActivityManager activityManager, GregorianCalendar startDate, @@ -108,10 +110,6 @@ public class ScheduledTaskContainer extends AbstractTaskContainer { // ignore } - public Set<ScheduledTaskDelegate> getDateRangeDelegates() { - return dateRangeDelegates; - } - public boolean isFuture() { return !isPresent() && getStart().after(Calendar.getInstance()); } @@ -120,6 +118,10 @@ public class ScheduledTaskContainer extends AbstractTaskContainer { return getStart().before(Calendar.getInstance()) && getEnd().after(Calendar.getInstance()); } + public boolean isToday() { + return TaskActivityUtil.getCalendar().get(Calendar.DAY_OF_MONTH) == getStart().get(Calendar.DAY_OF_MONTH); + } + @Override public int hashCode() { final int prime = 31; @@ -167,29 +169,27 @@ public class ScheduledTaskContainer extends AbstractTaskContainer { @Override public Set<AbstractTask> getChildren() { Set<AbstractTask> children = new HashSet<AbstractTask>(); - if (isPresent()) { - // add all overdue - Calendar beginning = Calendar.getInstance(); - beginning.setTimeInMillis(0); - Calendar end = Calendar.getInstance(); - end.set(5000, 12, 1); - for (AbstractTask task : activityManager.getDueTasks(beginning, getStart())) { - if (activityManager.isOverdue(task)) { + Calendar beginning = Calendar.getInstance(); + beginning.setTimeInMillis(0); + if (isCaptureFloating() && !isFuture()) { + for (AbstractTask task : activityManager.getScheduledTasks(beginning, getEnd())) { + if (task.internalIsFloatingScheduledDate()) { children.add(task); } } - - // add all over scheduled - for (AbstractTask task : activityManager.getScheduledTasks(beginning, getStart())) { - if (task.isPastReminder() && !task.isCompleted()) { + } else if (isPresent()) { + // add all due/overdue + Calendar end = Calendar.getInstance(); + end.set(5000, 12, 1); + for (AbstractTask task : activityManager.getDueTasks(beginning, getEnd())) { + if (activityManager.isOwnedByUser(task)) { children.add(task); } } - /*bug#212489 */ - //children.addAll(activityManager.getActiveTasks(getStart(), getEnd())); - children.addAll(activityManager.getScheduledTasks(getStart(), getEnd())); - for (AbstractTask task : activityManager.getDueTasks(getStart(), getEnd())) { - if (activityManager.isOwnedByUser(task)) { + + // add all scheduled/overscheduled + for (AbstractTask task : activityManager.getScheduledTasks(beginning, getEnd())) { + if (!task.internalIsFloatingScheduledDate() && !task.isCompleted()) { children.add(task); } } @@ -207,7 +207,6 @@ public class ScheduledTaskContainer extends AbstractTaskContainer { children.add(activeTask); } } - return children; } else if (isFuture()) { children.addAll(activityManager.getScheduledTasks(getStart(), getEnd())); for (AbstractTask task : activityManager.getDueTasks(getStart(), getEnd())) { @@ -215,12 +214,10 @@ public class ScheduledTaskContainer extends AbstractTaskContainer { children.add(task); } } - return children; } else { children.addAll(activityManager.getActiveTasks(getStart(), getEnd())); - return children; - } + return children; } @Override @@ -228,4 +225,12 @@ public class ScheduledTaskContainer extends AbstractTaskContainer { return getChildren(); } + public boolean isCaptureFloating() { + return captureFloating; + } + + public void setCaptureFloating(boolean captureFloating) { + this.captureFloating = captureFloating; + } + } diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityManager.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityManager.java index 6ac5982a1..1ac90f082 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityManager.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityManager.java @@ -457,7 +457,13 @@ public class TaskActivityManager { } } + public void setScheduledFor(AbstractTask task, Date reminderDate) { + setScheduledFor(task, reminderDate, false); + } + + + public void setScheduledFor(AbstractTask task, Date reminderDate, boolean floating) { // API-3.0: remove check if (task == null) return; @@ -467,6 +473,7 @@ public class TaskActivityManager { } task.setScheduledForDate(reminderDate); + task.internalSetFloatingScheduledDate(floating); if (reminderDate == null) { removeScheduledTask(task); } else { @@ -574,6 +581,18 @@ public class TaskActivityManager { } return false; } + + public boolean isScheduledForNextWeek(AbstractTask task) { + if (task != null) { + Date reminder = task.getScheduledForDate(); + if (reminder != null) { + Calendar time = TaskActivityUtil.getCalendar(); + time.setTime(reminder); + return TaskActivityUtil.isNextWeek(time); + } + } + return false; + } /** * TODO: move to activity manager @@ -592,19 +611,19 @@ public class TaskActivityManager { // scheduledEndHour = TasksUiPlugin.getDefault().getPreferenceStore().getInt( // TasksUiPreferenceConstants.PLANNING_ENDHOUR); - Calendar pastStart = GregorianCalendar.getInstance(); + Calendar pastStart = TaskActivityUtil.getCalendar(); pastStart.setTimeInMillis(0); // pastStart.setFirstDayOfWeek(startDay); // pastStart.setTime(startTime); // pastStart.add(Calendar.WEEK_OF_YEAR, NUM_WEEKS_PAST_START); -// snapToStartOfWeek(pastStart); +// TaskActivityUtil.snapToStartOfWeek(pastStart); GregorianCalendar pastEnd = new GregorianCalendar(); pastEnd.setFirstDayOfWeek(startDay); pastEnd.setTime(startTime); pastEnd.add(Calendar.WEEK_OF_YEAR, NUM_WEEKS_PAST_END); TaskActivityUtil.snapEndOfWeek(pastEnd); scheduledPast = new ScheduledTaskContainer(this, pastStart.getTime(), pastEnd.getTime(), DESCRIPTION_PAST); - scheduleContainers.add(scheduledPast); + //scheduleContainers.add(scheduledPast); scheduleWeekDays.clear(); for (int x = startDay; x < (startDay + 7); x++) { @@ -661,16 +680,28 @@ public class TaskActivityManager { scheduleContainers.add(day); } - GregorianCalendar currentBegin = new GregorianCalendar(); - currentBegin.setFirstDayOfWeek(startDay); + + Calendar currentBegin = TaskActivityUtil.getCalendar(); currentBegin.setTime(startTime); TaskActivityUtil.snapStartOfWorkWeek(currentBegin); - GregorianCalendar currentEnd = new GregorianCalendar(); - currentEnd.setFirstDayOfWeek(startDay); + Calendar currentEnd = TaskActivityUtil.getCalendar(); currentEnd.setTime(startTime); TaskActivityUtil.snapEndOfWeek(currentEnd); scheduledThisWeek = new ScheduledTaskContainer(this, currentBegin, currentEnd, DESCRIPTION_THIS_WEEK); - // dateRangeContainers.add(activityThisWeek); + scheduledThisWeek.setCaptureFloating(true); + //scheduleContainers.add(scheduledThisWeek); + +// GregorianCalendar currentBegin = new GregorianCalendar(); +// currentBegin.setFirstDayOfWeek(startDay); +// currentBegin.setTime(startTime); +// TaskActivityUtil.snapStartOfWorkWeek(currentBegin); +// GregorianCalendar currentEnd = new GregorianCalendar(); +// currentEnd.setFirstDayOfWeek(startDay); +// currentEnd.setTime(startTime); +// TaskActivityUtil.snapEndOfWeek(currentEnd); +// scheduledThisWeek = new ScheduledTaskContainer(this, currentBegin, currentEnd, DESCRIPTION_THIS_WEEK); +// scheduledThisWeek.setCaptureFloating(true); +// //scheduleContainers.add(scheduledThisWeek); GregorianCalendar nextStart = new GregorianCalendar(); nextStart.setFirstDayOfWeek(startDay); @@ -684,7 +715,9 @@ public class TaskActivityManager { TaskActivityUtil.snapEndOfWeek(nextEnd); scheduledNextWeek = new ScheduledTaskContainer(this, nextStart.getTime(), nextEnd.getTime(), DESCRIPTION_NEXT_WEEK); + scheduledNextWeek.setCaptureFloating(true); scheduleContainers.add(scheduledNextWeek); + GregorianCalendar futureStart = new GregorianCalendar(); futureStart.setFirstDayOfWeek(startDay); @@ -698,6 +731,7 @@ public class TaskActivityManager { TaskActivityUtil.snapEndOfWeek(futureEnd); scheduledFuture = new ScheduledTaskContainer(this, futureStart.getTime(), futureEnd.getTime(), DESCRIPTION_FUTURE); + scheduledFuture.setCaptureFloating(true); scheduleContainers.add(scheduledFuture); GregorianCalendar previousStart = new GregorianCalendar(); @@ -712,7 +746,7 @@ public class TaskActivityManager { TaskActivityUtil.snapEndOfWeek(previousEnd); scheduledPrevious = new ScheduledTaskContainer(this, previousStart.getTime(), previousEnd.getTime(), DESCRIPTION_PREVIOUS_WEEK); - scheduleContainers.add(scheduledPrevious); + //scheduleContainers.add(scheduledPrevious); } public List<ScheduledTaskContainer> getDateRanges() { diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityUtil.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityUtil.java index abf3eb6f1..ee6ae0d88 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityUtil.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskActivityUtil.java @@ -70,6 +70,17 @@ public class TaskActivityUtil { snapEndOfDay(cal); return cal; } + + public static Calendar snapEndOfNextWeek(Calendar cal) { + if (cal.getFirstDayOfWeek() == Calendar.MONDAY) { + cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); + } else { + cal.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY); + } + snapEndOfWeek(cal); + cal.add(Calendar.WEEK_OF_MONTH, 1); + return cal; + } public static Calendar snapForwardNumDays(Calendar calendar, int days) { calendar.add(Calendar.DAY_OF_MONTH, days); @@ -126,6 +137,18 @@ public class TaskActivityUtil { } return false; } + + public static boolean isNextWeek(Calendar time) { + if (time != null) { + Calendar weekStart = getCalendar(); + snapNextWorkWeek(weekStart); + Calendar weekEnd = getCalendar(); + snapNextWorkWeek(weekEnd); + snapEndOfWeek(weekEnd); + return (time.compareTo(weekStart) >= 0 && time.compareTo(weekEnd) <= 0); + } + return false; + } public static boolean isToday(Calendar time) { if (time != null) { diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractTask.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractTask.java index 64f76051f..f8ec79692 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractTask.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractTask.java @@ -48,6 +48,8 @@ public abstract class AbstractTask extends AbstractTaskContainer { private boolean isNotifiedIncoming = false; private boolean reminded = false; + + private boolean floatingScheduledDate = false; private String categoryHandle = ""; @@ -469,4 +471,20 @@ public abstract class AbstractTask extends AbstractTaskContainer { this.categoryHandle = categoryHandle; } + /** + * @since 2.3 + * @API 3.0: rename/move + */ + public boolean internalIsFloatingScheduledDate() { + return floatingScheduledDate; + } + + /** + * @since 2.3 + * @API 3.0: rename/move + */ + public void internalSetFloatingScheduledDate(boolean floatingScheduledDate) { + this.floatingScheduledDate = floatingScheduledDate; + } + } |