Files
portal/src/com/bradrydzewski/gwt/calendar/client/techview/DayViewGrid.java
2012-12-04 03:57:45 -08:00

105 lines
3.4 KiB
Java

package com.bradrydzewski.gwt.calendar.client.techview;
import com.bradrydzewski.gwt.calendar.client.HasSettings;
import com.bradrydzewski.gwt.calendar.client.util.FormattingUtil;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.ComplexPanel;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
/**
* The DayGrid draws the grid that displays days / time intervals in the
* body of the calendar.
*
* @author Brad Rydzewski
*/
public class DayViewGrid /*Impl*/ extends Composite {
class Div extends ComplexPanel {
public Div() {
setElement(DOM.createDiv());
}
@Override
public boolean remove(Widget w) {
return super.remove(w);
}
@Override
public void add(Widget w) {
super.add(w, getElement());
}
}
protected AbsolutePanel grid = new AbsolutePanel();
protected SimplePanel gridOverlay = new SimplePanel();
private HasSettings settings = null;
private static final int HOURS_PER_DAY = 24;
public DayViewGrid(HasSettings settings) { //was DayViewGridImpl
initWidget(grid);
this.settings = settings;
}
public void build(int workingHourStart, int workingHourStop, int days) {
grid.clear();
int intervalsPerHour = settings.getSettings().getIntervalsPerHour(); //2; //30 minute intervals
float intervalSize = settings.getSettings().getPixelsPerInterval();
this.setHeight((intervalsPerHour * (intervalSize) * 24) + "px");
float dayWidth = 100f / days;
float dayLeft = 0f;
int dayStartsAt = settings.getSettings().getDayStartsAt();
for (int i = 0; i < HOURS_PER_DAY; i++) {
boolean isWorkingHours = ((i + dayStartsAt) >= workingHourStart && (i + dayStartsAt) <= workingHourStop);
//create major interval
SimplePanel sp1 = new SimplePanel();
sp1.setStyleName("major-time-interval");
sp1.setHeight(intervalSize + FormattingUtil.getBorderOffset() + "px");
//if working hours set
if (isWorkingHours) {
sp1.addStyleName("working-hours");
}
//add to body
grid.add(sp1);
for (int x = 0; x < intervalsPerHour - 1; x++) {
SimplePanel sp2 = new SimplePanel();
sp2.setStyleName("minor-time-interval");
sp2.setHeight(intervalSize + FormattingUtil.getBorderOffset() + "px");
if (isWorkingHours) {
sp2.addStyleName("working-hours");
}
grid.add(sp2);
}
}
for (int day = 0; day < days; day++) {
dayLeft = dayWidth * day;
SimplePanel dayPanel = new SimplePanel();
dayPanel.setStyleName("day-separator");
grid.add(dayPanel);
DOM.setStyleAttribute(dayPanel.getElement(), "left", dayLeft + "%");
}
gridOverlay.setHeight("100%");
gridOverlay.setWidth("100%");
DOM.setStyleAttribute(gridOverlay.getElement(), "position", "absolute");
DOM.setStyleAttribute(gridOverlay.getElement(), "left", "0px");
DOM.setStyleAttribute(gridOverlay.getElement(), "top", "0px");
grid.add(gridOverlay);
}
}