package no.ntnu.fp.gui; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Graphics; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Calendar; import java.util.Date; import java.util.List; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import no.ntnu.fp.gui.timepicker.DateModel; import no.ntnu.fp.model.User; import no.ntnu.fp.util.Log; public class CalendarPanel extends JPanel implements PropertyChangeListener { public static final String DAYS[] = new String[] { "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag" }; private Navigator weekNavigator; private Navigator yearNavigator; private WeekSheet weekSheet; private WeekSheetAdapter weekSheetAdapter; private JScrollPane scrollArea; private DateModel dateModel; private User user; private List<User> others; private JPanel header; public CalendarPanel(User user) { // Creates instance with current system time Date object this(new DateModel(Calendar.getInstance().getTime()), user); } public CalendarPanel(DateModel date, User user) { setLayout(new BorderLayout(12, 12)); this.user = user; this.dateModel = date; weekNavigator = new WeekNavigator(dateModel); // = new Navigator("Week",date.getWeek(), 1, 52); weekNavigator.addPropertyChangeListener(this); yearNavigator = new YearNavigator(dateModel); //= new Navigator("Year",date.getYear(), 0, Integer.MAX_VALUE); yearNavigator.addPropertyChangeListener(this); JPanel top = new JPanel(); top.add(weekNavigator); top.add(yearNavigator); JPanel weekSheetPanel = new JPanel(); weekSheetPanel.setLayout(new BorderLayout()); weekSheetAdapter = new WeekSheetAdapter(this.dateModel, user.getCalendar()); weekSheet = new WeekSheet(weekSheetAdapter); this.dateModel.addPropertyChangeListener(weekSheet); scrollArea = new JScrollPane(weekSheet); scrollArea.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); scrollArea.setPreferredSize(new Dimension(600, 300)); scrollArea.setRowHeaderView(new JLabel(" ")); header = new JPanel() { @Override public void paint(Graphics g) { super.paint(g); DateModel date = new DateModel(dateModel.getDate()); Calendar c = Calendar.getInstance(); c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); date.setDay(c.get(Calendar.DATE)+1); for (int i=0; i<7; i++) { String label = DAYS[i] + " (" + date.getDay() + "." + (date.getMonth()+1) + ")"; g.drawString(label, 50 + (100*i), 9); date.setDay(date.getDay()+1); } } }; header.setSize(new Dimension(600, 20)); weekSheetPanel.add(header, BorderLayout.NORTH); weekSheetPanel.add(scrollArea, BorderLayout.CENTER); add(top, BorderLayout.NORTH); add(weekSheetPanel, BorderLayout.CENTER); } public void propertyChange(PropertyChangeEvent pce) { if (pce.getPropertyName().equals(Navigator.VALUE_PROPERTY)) { if (pce.getSource().equals(weekNavigator)) { dateModel.setWeek((Integer) pce.getNewValue()); } else if (pce.getSource().equals(yearNavigator)) { dateModel.setYear((Integer) pce.getNewValue()); } scrollArea.getVerticalScrollBar().setValue(400); header.repaint(); } } @Override public String toString() { return "CalendarPanel"; } }