1 19 20 package org.lucane.applications.calendar.widget; 21 22 import java.awt.*; 23 import java.util.ArrayList ; 24 import java.util.Calendar ; 25 26 import javax.swing.*; 27 28 import org.lucane.applications.calendar.CalendarPlugin; 29 30 31 34 public class WeekView extends JPanel 35 { 36 public JPanel headerPanel; 38 public JPanel contentPanel; 39 private JScrollPane contentScrollPane; 40 41 private ArrayList listeners; 43 44 private Color unworkedHour = new Color(160, 155, 150); 45 private Color workedHour = new Color(255, 255, 222); 46 private int workStart = 8; 47 private int workEnd = 17; 48 49 private boolean sundayFirst = false; 50 51 55 public WeekView(CalendarPlugin plugin) 56 { 57 super(new BorderLayout()); 58 59 this.listeners = new ArrayList (); 60 61 unworkedHour = plugin.getColor("unworked", unworkedHour); 62 workedHour = plugin.getColor("worked", workedHour); 63 workStart = plugin.getLocalConfig().getInt("workStart", workStart); 64 workEnd = plugin.getLocalConfig().getInt("workEnd", workEnd); 65 sundayFirst = plugin.getLocalConfig().getInt("sundayFirst", 0) == 1; 66 67 this.contentScrollPane = new JScrollPane(); 68 this.headerPanel = new JPanel(new GridLayout(1, 7)); 69 this.contentPanel = new JPanel(new GridLayout(1, 7)){ 70 public Dimension getPreferredSize() { 71 Dimension base = super.getPreferredSize(); 72 base.width = contentScrollPane.getSize().width; 73 base.width -= contentScrollPane.getVerticalScrollBar().getSize().width; 74 return base; 75 } 76 }; 77 contentScrollPane.setViewportView(contentPanel); 78 contentScrollPane.setColumnHeaderView(headerPanel); 79 contentScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 80 this.add(contentScrollPane, BorderLayout.CENTER); 81 82 if(sundayFirst) 83 headerPanel.add(new DayHeader(plugin.tr("day.7"))); 84 for(int i=1;i<=6;i++) 85 headerPanel.add(new DayHeader(plugin.tr("day."+i))); 86 if(!sundayFirst) 87 headerPanel.add(new DayHeader(plugin.tr("day.7"))); 88 89 Calendar c = Calendar.getInstance(); 90 setDisplayedWeek(c.get(Calendar.WEEK_OF_YEAR)+1, c.get(Calendar.YEAR)); 91 } 92 93 99 public void setDisplayedWeek(int week, int year) 100 { 101 Calendar calendar = Calendar.getInstance(); 102 calendar.set(Calendar.YEAR, year); 103 calendar.set(Calendar.WEEK_OF_YEAR, week-1); 104 calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 105 106 contentPanel.removeAll(); 107 for(int i=0;i<7;i++) 108 { 109 DayView day = new DayView((Calendar )calendar.clone(), unworkedHour, workedHour, workStart, workEnd); 110 day.setCalendarListeners(listeners); 111 contentPanel.add(day); 112 calendar.add(Calendar.DAY_OF_YEAR, 1); 113 } 114 scrollToHour(workStart-1); 115 } 116 117 121 public void scrollToHour(int hour) 122 { 123 contentScrollPane.getViewport().setViewPosition(new Point(0, hour*40)); 124 } 125 126 131 public void addCalendarListener(CalendarListener listener) 132 { 133 listeners.add(listener); 134 } 135 136 public void addEvent(int dayOfWeek, BasicEvent event) 137 { 138 if(!sundayFirst) 139 dayOfWeek = (dayOfWeek == 0 || dayOfWeek == 7 )? 6 : dayOfWeek-1; 140 else if(dayOfWeek > 7) 141 dayOfWeek = 0; 142 143 getDayView(dayOfWeek).addEvent(event); 144 } 145 146 152 private DayView getDayView(int index) 153 { 154 return (DayView)contentPanel.getComponent(index); 155 } 156 } 157 158 159 | Popular Tags |