package no.ntnu.fp.gui;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.ArrayList;
import java.util.Date;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import no.ntnu.fp.gui.timepicker.DateModel;
import no.ntnu.fp.model.CalendarEntry;
import no.ntnu.fp.model.Meeting;
import no.ntnu.fp.util.Log;
import no.ntnu.fp.util.TimeLord;
/**
* Shows a grid representing 7days (cols) and 24 hour (rows) with CalendarEnties
* placed on the sheet with x, y and height corresponding to their weekday, startTime and duration
*
* @author andrephilipp
*
*/
public class WeekSheet extends JPanel implements PropertyChangeListener{
final Color GRID_COLOR = Color.LIGHT_GRAY;
final Color HOURLABELS_COLOR = Color.LIGHT_GRAY;
private ArrayList<JLabel> hours = new ArrayList<JLabel>();
//public ArrayList<CalendarEntryView> events = new ArrayList<CalendarEntryView>();
private WeekSheetAdapter adapter;
private int cellHeight;
private int cellWidth;
private int hourColWidth;
private JPanel weekHeader;
public WeekSheet(WeekSheetAdapter adapter) {
cellHeight = 50;
cellWidth = 100;
hourColWidth = 40;
this.adapter = adapter;
adapter.addPropertyChangeListener(this);
setBackground(Color.white);
addEvents();
setPreferredSize(new Dimension(40+(100*7), (24*50)));
setLayout(null);
updateSheet();
}
private void addEvents() {
for(CalendarEntryView cev: adapter){
cev.setPosition();
add(cev);
}
}
public void updateSheet() {
JComponent parent = ((JComponent)getParent());
if (parent != null) {
Log.out("update");
removeAll();
addEvents();
parent.revalidate();
parent.repaint();
}
}
public int getCellHeight() {
return cellHeight;
}
public int getCellWidth() {
return cellWidth;
}
public int getHourColWidth() {
return hourColWidth;
}
/*private void addHourLabels() {
JLabel hour;
for (int i = 0; i < 24; i++) {
hour = new JLabel(i + ":00");
hour.setForeground(HOURLABELS_COLOR);
hour.setBounds(0, i * cellHeight, hour.getPreferredSize().width,
hour.getPreferredSize().height);
add(hour);
hours.add(hour);
hourColWidth = hour.getWidth() + 2;
}
}*/
public void paint(Graphics g) {
super.paint(g);
paintGrid(g);
paintHours(g);
}
private void paintHours(Graphics g) {
for (int i=0; i<24; i++) {
g.drawString(TimeLord.formatTime(i), 0, i*cellHeight + 15);
}
}
/*private void paintEvents() {
int x, y, width, height;
for (CalendarEntryView e : events) {
x = hourColWidth + (e.getModel().getDayOfWeek() - 1) * cellWidth;
y = (e.getModel().getTimeOfDay() * cellHeight) / 60;
width = cellWidth;
height = (int) (e.getModel().getDuration() * cellHeight) / 60;
System.out.println("X: "+x);
System.out.println("Y: "+y);
System.out.println("Width: "+width);
System.out.println("Height: "+height);
e.setBounds(x, y, width, height);
}
}*/
/**
* Paints a 24x7 grid representing 24 hours and 7 days
*
* @param Graphic
* object to paint to
*/
private void paintGrid(Graphics g) {
g.setColor(Color.WHITE);
//g.drawRect(0, 0, getWidth(), getHeight());
g.setColor(GRID_COLOR);
for (int i = 0; i < 24; i++) {
int x1 = 0;
int y1 = i * cellHeight;
int x2 = getWidth();
int y2 = i * cellHeight;
g.drawLine(x1, y1, x2, y2);
}
for (int i = 0; i < 7; i++) {
g.drawLine(i * cellWidth + hourColWidth, 0, i * cellWidth + hourColWidth, getHeight());
}
}
@Override
public void propertyChange(PropertyChangeEvent arg0) {
updateSheet();
}
}