ItEr60S04ValidacionEProbasFuncionaisItEr59S04 : [Bug #537]

it puts the task correctly when the zoom is at the week level.
This commit is contained in:
Susana Montes Pedreira 2010-06-21 19:25:46 +02:00 committed by Javier Moran Rua
parent 1020df71dd
commit 2a8bb34702
3 changed files with 61 additions and 9 deletions

View file

@ -192,9 +192,11 @@ public class TimeTracker {
} }
public int getHorizontalSize() { public int getHorizontalSize() {
Collection<DetailItem> detailsSecondLevel = getDetailsSecondLevel(); int horizontalSize = 0;
return detailsSecondLevel.size() for (DetailItem detailItem : getDetailsSecondLevel()) {
* getTimeTrackerState().getSecondLevelSize(); horizontalSize += detailItem.getSize();
}
return horizontalSize;
} }
private void clearDetailLevelDependantData() { private void clearDetailLevelDependantData() {

View file

@ -20,12 +20,20 @@
package org.zkoss.ganttz.timetracker.zoom; package org.zkoss.ganttz.timetracker.zoom;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.GregorianCalendar;
import java.util.List;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.joda.time.Days; import org.joda.time.Days;
import org.joda.time.LocalDate; import org.joda.time.LocalDate;
import org.joda.time.Months; import org.joda.time.Months;
import org.joda.time.ReadablePeriod; import org.joda.time.ReadablePeriod;
import org.joda.time.Weeks; import org.joda.time.Weeks;
import org.zkoss.ganttz.util.Interval;
/** /**
* Zoom level for months and years and weeks in the second level * Zoom level for months and years and weeks in the second level
@ -41,8 +49,15 @@ public class DetailFourTimeTrackerState extends TimeTrackerStateUsingJodaTime {
super(firstLevelModificator, secondLevelModificator); super(firstLevelModificator, secondLevelModificator);
} }
private static final int FIRST_LEVEL_SIZE = 200; private static final int FIRST_LEVEL_SIZE = 210;
private static final int SECOND_LEVEL_SIZE = 50; private static final int SECOND_LEVEL_SIZE = 56;
private static final int MAX_DAYS = 8;
private int daysWeek = 7;
public final double pixelPerDay() {
return (SECOND_LEVEL_SIZE / (double) 7);
}
public final double daysPerPixel() { public final double daysPerPixel() {
return ((double) 7 / SECOND_LEVEL_SIZE); return ((double) 7 / SECOND_LEVEL_SIZE);
@ -55,7 +70,7 @@ public class DetailFourTimeTrackerState extends TimeTrackerStateUsingJodaTime {
@Override @Override
public DetailItem create(DateTime dateTime) { public DetailItem create(DateTime dateTime) {
return new DetailItem(FIRST_LEVEL_SIZE, dateTime return new DetailItem(getSizeMonth(dateTime), dateTime
.toString("MMMM,YYYY"), dateTime, dateTime .toString("MMMM,YYYY"), dateTime, dateTime
.plusMonths(1)); .plusMonths(1));
} }
@ -68,9 +83,13 @@ public class DetailFourTimeTrackerState extends TimeTrackerStateUsingJodaTime {
@Override @Override
public DetailItem create(DateTime dateTime) { public DetailItem create(DateTime dateTime) {
return new DetailItem(SECOND_LEVEL_SIZE, dateTime daysWeek = MAX_DAYS - dateTime.getDayOfWeek();
int sizeWeek = (new BigDecimal(pixelPerDay() * daysWeek))
.intValue();
return new DetailItem(sizeWeek, dateTime
.getWeekOfWeekyear() .getWeekOfWeekyear()
+ "",dateTime,dateTime.plusWeeks(1)); + "", dateTime, dateTime.plusDays(daysWeek));
} }
}; };
} }
@ -109,4 +128,35 @@ public class DetailFourTimeTrackerState extends TimeTrackerStateUsingJodaTime {
return SECOND_LEVEL_SIZE; return SECOND_LEVEL_SIZE;
} }
@Override
public Collection<DetailItem> createDetails(Interval interval,
ReadablePeriod period, IDetailItemCreator detailItemCreator) {
if (period.equals(getPeriodFirstLevel())) {
return super.createDetails(interval, period, detailItemCreator);
} else {
return createDetails(interval, detailItemCreator);
}
}
private Collection<DetailItem> createDetails(Interval interval,
IDetailItemCreator detailItemCreator) {
DateTime current = asLocalDate(interval.getStart())
.toDateTimeAtStartOfDay();
DateTime end = asLocalDate(interval.getFinish())
.toDateTimeAtStartOfDay();
List<DetailItem> result = new ArrayList<DetailItem>();
while (current.isBefore(end)) {
result.add(detailItemCreator.create(current));
current = current.plus(Days.days(daysWeek));
}
return result;
}
private int getSizeMonth(DateTime dateTime) {
Calendar cal = new GregorianCalendar(dateTime.getYear(), dateTime
.getMonthOfYear() - 1, dateTime.getDayOfMonth());
// Get the number of days in that month
int days = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
return new BigDecimal(pixelPerDay() * days).intValue();
}
} }

View file

@ -50,7 +50,7 @@ public abstract class TimeTrackerStateUsingJodaTime extends TimeTrackerState {
DetailItem create(DateTime dateTime); DetailItem create(DateTime dateTime);
} }
public static Collection<DetailItem> createDetails(Interval interval, public Collection<DetailItem> createDetails(Interval interval,
ReadablePeriod period, IDetailItemCreator detailItemCreator) { ReadablePeriod period, IDetailItemCreator detailItemCreator) {
DateTime current = asLocalDate(interval.getStart()) DateTime current = asLocalDate(interval.getStart())
.toDateTimeAtStartOfDay(); .toDateTimeAtStartOfDay();