2 * Namespace: System.Web.UI.WebControls
\r
5 * Author: Gaurav Vaish
\r
6 * Maintainer: gvaish@iitk.ac.in
\r
7 * Contact: <my_scripts2001@yahoo.com>, <gvaish@iitk.ac.in>
\r
8 * Implementation: yes
\r
11 * (C) Gaurav Vaish (2001)
\r
16 using System.Collections;
\r
17 using System.Globalization;
\r
20 using System.Web.UI;
\r
21 using System.Drawing;
\r
23 namespace System.Web.UI.WebControls
\r
25 public class Calendar : WebControl, IPostBackEventHandler
\r
29 private TableItemStyle dayHeaderStyle;
\r
30 private TableItemStyle dayStyle;
\r
31 private TableItemStyle nextPrevStyle;
\r
32 private TableItemStyle otherMonthDayStyle;
\r
33 private SelectedDatesCollection selectedDates;
\r
34 private ArrayList selectedDatesList;
\r
35 private TableItemStyle selectedDayStyle;
\r
36 private TableItemStyle selectorStyle;
\r
37 private TableItemStyle titleStyle;
\r
38 private TableItemStyle todayDayStyle;
\r
39 private TableItemStyle weekendDayStyle;
\r
41 private static readonly object DayRenderEvent = new object();
\r
42 private static readonly object SelectionChangedEvent = new object();
\r
43 private static readonly object VisibleMonthChangedEvent = new object();
\r
45 private Color defaultTextColor;
\r
46 private System.Globalization.Calendar globCal;
\r
48 public Calendar(): base()
\r
50 //TODO: Initialization
\r
53 public int CellPadding
\r
57 object o = ViewState["CellPadding"];
\r
64 ViewState["CellPadding"] = value;
\r
68 public int CellSpacing
\r
72 object o = ViewState["CellSpacing"];
\r
80 throw new ArgumentOutOfRangeException();
\r
81 ViewState["CellSpacing"] = value;
\r
85 public TableItemStyle DayHeaderStyle
\r
89 if(dayHeaderStyle==null)
\r
90 dayHeaderStyle = new TableItemStyle();
\r
91 return dayHeaderStyle;
\r
95 public DayNameFormat DayNameFormat
\r
99 object o = ViewState["DayNameFormat"];
\r
101 return (DayNameFormat)o;
\r
102 return DayNameFormat.Short;
\r
106 if(!System.Enum.IsDefined(typeof(DayNameFormat),value))
\r
107 throw new ArgumentException();
\r
108 ViewState["DayNameFormat"] = value;
\r
112 public TableItemStyle DayStyle
\r
117 dayStyle = new TableItemStyle();
\r
122 public FirstDayOfWeek FirstDayOfWeek
\r
126 object o = ViewState["FirstDayOfWeek"];
\r
128 return (FirstDayOfWeek)o;
\r
129 return FirstDayOfWeek.Default;
\r
133 if(!System.Enum.IsDefined(typeof(FirstDayOfWeek), value))
\r
134 throw new ArgumentException();
\r
135 ViewState["FirstDayOfWeek"] = value;
\r
139 public string NextMonthText
\r
143 object o = ViewState["NextMonthText"];
\r
150 ViewState["NextMonthText"] = value;
\r
154 public NextPrevFormat NextPrevFormat
\r
158 object o = ViewState["NextPrevFormat"];
\r
160 return (NextPrevFormat)o;
\r
161 return NextPrevFormat.CustomText;
\r
165 if(!System.Enum.IsDefined(typeof(NextPrevFormat), value))
\r
166 throw new ArgumentException();
\r
167 ViewState["NextPrevFormat"] = value;
\r
171 public TableItemStyle NextPrevStyle
\r
175 if(nextPrevStyle == null)
\r
176 nextPrevStyle = new TableItemStyle();
\r
177 return nextPrevStyle;
\r
181 public TableItemStyle OtherMonthDayStyle
\r
185 if(otherMonthDayStyle == null)
\r
186 otherMonthDayStyle = new TableItemStyle();
\r
187 return otherMonthDayStyle;
\r
191 public string PrevMonthText
\r
195 object o = ViewState["PrevMonthText"];
\r
202 ViewState["PrevMonthText"] = value;
\r
206 public DateTime SelectedDate
\r
208 // TODO: Am I right here? I got confused with the "Remarks" written in the documentation
\r
210 * Looks like I have to first do something with SelectionMode,
\r
211 * then with SelectedDates,
\r
212 * Update when SelectionChanged is called => Link to the function.
\r
213 * Pretty confused at this point
\r
217 object o = ViewState["SelectedDate"];
\r
219 return (DateTime)o;
\r
220 return DateTime.MinValue;
\r
224 ViewState["SelectedDate"] = value;
\r
228 public SelectedDatesCollection SelectedDates
\r
232 if(selectedDates==null)
\r
234 if(selectedDatesList == null)
\r
235 selectedDatesList = new ArrayList();
\r
236 selectedDates = new SelectedDatesCollection(selectedDatesList);
\r
238 return selectedDates;
\r
242 public TableItemStyle SelectedDayStyle
\r
246 if(selectedDayStyle==null)
\r
247 selectedDayStyle = new TableItemStyle();
\r
248 return selectedDayStyle;
\r
252 public CalendarSelectionMode SelectionMode
\r
256 object o = ViewState["SelectionMode"];
\r
258 return (CalendarSelectionMode)o;
\r
259 return CalendarSelectionMode.Day;
\r
263 if(!System.Enum.IsDefined(typeof(CalendarSelectionMode), value))
\r
264 throw new ArgumentException();
\r
265 ViewState["SelectionMode"] = value;
\r
269 public string SelectedMonthText
\r
273 object o = ViewState["SelectedMonthText"];
\r
280 ViewState["SelectedMonthText"] = value;
\r
284 public TableItemStyle SelectorStyle
\r
288 if(selectorStyle==null)
\r
289 selectorStyle = new TableItemStyle();
\r
290 return selectorStyle;
\r
294 public string SelectedWeekText
\r
298 object o = ViewState["SelectedWeekText"];
\r
305 ViewState["SelectedWeekText"] = value;
\r
309 public bool ShowDayHeader
\r
313 object o = ViewState["ShowDayHeader"];
\r
320 ViewState["ShowDayHeader"] = value;
\r
324 public bool ShowGridLines
\r
328 object o = ViewState["ShowGridLines"];
\r
335 ViewState["ShowGridLines"] = value;
\r
339 public bool ShowNextPrevMonth
\r
343 object o = ViewState["ShowNextPrevMonth"];
\r
350 ViewState["ShowNextPrevMonth"] = value;
\r
354 public bool ShowTitle
\r
358 object o = ViewState["ShowTitle"];
\r
365 ViewState["ShowTitle"] = value;
\r
369 public TitleFormat TitleFormat
\r
373 object o = ViewState["TitleFormat"];
\r
375 return (TitleFormat)o;
\r
376 return TitleFormat.MonthYear;
\r
380 if(!System.Enum.IsDefined(typeof(TitleFormat), value))
\r
381 throw new ArgumentException();
\r
382 ViewState["TitleFormat"] = value;
\r
386 public TableItemStyle TitleStyle
\r
390 if(titleStyle==null)
\r
391 titleStyle = new TableItemStyle();
\r
396 public TableItemStyle TodayDayStyle
\r
400 if(todayDayStyle==null)
\r
401 todayDayStyle = new TableItemStyle();
\r
402 return todayDayStyle;
\r
406 public DateTime TodaysDate
\r
410 object o = ViewState["TodaysDate"];
\r
412 return (DateTime)o;
\r
413 return DateTime.Today;
\r
417 ViewState["TodaysDate"] = value;
\r
421 public DateTime VisibleDate
\r
425 object o = ViewState["VisibleDate"];
\r
427 return (DateTime)o;
\r
428 return DateTime.MinValue;
\r
432 ViewState["VisibleDate"] = value;
\r
436 public TableItemStyle WeekendDayStyle
\r
440 if(weekendDayStyle == null)
\r
441 weekendDayStyle = new TableItemStyle();
\r
442 return weekendDayStyle;
\r
446 public event DayRenderEventHandler DayRender
\r
450 Events.AddHandler(DayRenderEvent, value);
\r
454 Events.RemoveHandler(DayRenderEvent, value);
\r
458 public event EventHandler SelectionChanged
\r
462 Events.AddHandler(SelectionChangedEvent, value);
\r
466 Events.RemoveHandler(SelectionChangedEvent, value);
\r
470 public event MonthChangedEventHandler VisibleMonthChanged
\r
474 Events.AddHandler(VisibleMonthChangedEvent, value);
\r
478 Events.RemoveHandler(VisibleMonthChangedEvent, value);
\r
482 protected virtual void OnDayRender(TableCell cell, CalendarDay day)
\r
486 DayRenderEventHandler dreh = (DayRenderEventHandler)(Events[DayRenderEvent]);
\r
488 dreh(this, new DayRenderEventArgs(cell, day));
\r
492 protected virtual void OnSelectionChanged()
\r
496 EventHandler eh = (EventHandler)(Events[SelectionChangedEvent]);
\r
498 eh(this, new EventArgs());
\r
502 protected virtual void OnVisibleMonthChanged(DateTime newDate, DateTime prevDate)
\r
506 MonthChangedEventHandler mceh = (MonthChangedEventHandler)(Events[VisibleMonthChangedEvent]);
\r
508 mceh(this, new MonthChangedEventArgs(newDate, prevDate));
\r
512 void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)
\r
514 //TODO: Implement Me
\r
515 // Written to keep compile get going
\r
516 throw new NotImplementedException();
\r
519 protected override void Render(HtmlTextWriter writer)
\r
521 //TODO: Implement me
\r
522 throw new NotImplementedException();
\r
523 globCal = DateTimeFormatInfo.CurrentInfo.Calendar;
\r
524 SetFirstCalendarDay(GetEffectiveVisibleDate());
\r
526 * ForeColor else defaultTextColor
\r
528 * if(ControlStyleCreated())
\r
531 * ApplyStyle(ControlStyle)
\r
534 * RenderBeginTag(writer)
\r
535 * RenderTitle(writer, visibleDate from GetEffectiveVisibleDate, this.SelectionMode, IsEnabled)
\r
537 * RenderHeader(writer, visibleDate, SelectionMode, IsEnabled,
\r
539 * RenderEndTag(writer)
\r
543 protected override ControlCollection CreateControlCollection()
\r
545 return new EmptyControlCollection(this);
\r
548 protected override void LoadViewState(object savedState)
\r
550 if(savedState!=null)
\r
552 //TODO: Implement me
\r
553 //object[] states = (object[]) savedState;
\r
554 //loadViewState of all the states/styles
\r
556 throw new NotImplementedException();
\r
559 protected override object SaveViewState()
\r
561 //TODO: Implement me
\r
562 // SaveViewState of all the styles
\r
563 throw new NotImplementedException();
\r
566 protected override void TrackViewState()
\r
568 base.TrackViewState();
\r
569 if(titleStyle!=null)
\r
571 titleStyle.TrackViewState();
\r
573 if(nextPrevStyle!=null)
\r
575 nextPrevStyle.TrackViewState();
\r
579 dayStyle.TrackViewState();
\r
581 if(dayHeaderStyle!=null)
\r
583 dayHeaderStyle.TrackViewState();
\r
585 if(todayDayStyle!=null)
\r
587 todayDayStyle.TrackViewState();
\r
589 if(weekendDayStyle!=null)
\r
591 weekendDayStyle.TrackViewState();
\r
593 if(otherMonthDayStyle!=null)
\r
595 otherMonthDayStyle.TrackViewState();
\r
597 if(selectedDayStyle!=null)
\r
599 selectedDayStyle.TrackViewState();
\r
601 if(selectorStyle!=null)
\r
603 selectorStyle.TrackViewState();
\r
607 //TODO: Recheck, I am through with all the functions?
\r
609 private void RenderAllDays(HtmlTextWriter writer, DateTime firstDay, DateTime activeDate, CalendarSelectionMode mode, bool isActive, bool isDownLevel)
\r
611 throw new NotImplementedException();
\r
612 //TODO: Implement me
\r
619 private void RenderHeader(HtmlTextWriter writer, DateTime firstDay, CalendarSelectionMode mode, bool isActive, bool isDownLevel)
\r
621 throw new NotImplementedException();
\r
622 //TODO: Implement Me
\r
629 private void RenderTitle(HtmlTextWriter writer, DateTime visibleDate, CalendarSelectionMode mode, bool isActive)
\r
631 throw new NotImplementedException();
\r
632 //TODO: Implement me
\r
634 * Make a row with the following contents: "<tr>"
\r
635 * Draw a table, with cell having the following properties
\r
636 * if(mode==CalendarSelectionMode.DayWeek || mode==CalendarSelectionMode.DayWeekMonth)
\r
637 * then draw a column with colspan=8
\r
639 * draw with colspan=7
\r
643 * ApplyStyleToTitle(table, cell, style)
\r
644 * RenderBeginTag(writer)
\r
645 * RenderBeginTag(writer)
\r
647 * -> The next/previous months things
\r
648 * GetCalendarText("previousMonth", PrevMonthText, NextPrevStyle.ForeColor, isActive)
\r
649 * RenderCalendarCell(writer, cell, ^^^)
\r
652 * Then for NextMonthText
\r
658 private void ApplyStyleToTitle(Table table, TableCell cell, TableItemStyle style)
\r
660 throw new NotImplementedException();
\r
661 //TODO: Implement me
\r
669 * Vertical alignment
\r
673 private void RenderCalendarCell(HtmlTextWriter writer, TableCell cell, string text)
\r
675 cell.RenderBeginTag(writer);
\r
676 writer.Write(text);
\r
677 cell.RenderEndTag(writer);
\r
680 private DateTime SetFirstCalendarDay(DateTime visibleDate)
\r
682 throw new NotImplementedException();
\r
683 //TODO: Implement me
\r
686 private DateTime GetEffectiveVisibleDate()
\r
688 DateTime dt = VisibleDate;
\r
689 if(dt.Equals(DateTime.MinValue))
\r
693 return new DateTime(globCal.GetYear(dt), globCal.GetMonth(dt), globCal.GetDayOfMonth(dt), globCal);
\r
697 * Creates text to be displayed, with all attributes if to be
\r
698 * shown as a hyperlink
\r
700 private string GetCalendarText(string eventArg, string text, Color foreground, bool isLink)
\r
704 StringBuilder dispVal = new StringBuilder();
\r
705 dispVal.Append("<a href=\"");
\r
706 dispVal.Append(Page.GetPostBackClientHyperlink(this, eventArg));
\r
707 dispVal.Append("\" style=\"color: ");
\r
708 if(foreground.IsEmpty)
\r
710 dispVal.Append(ColorTranslator.ToHtml(defaultTextColor));
\r
713 dispVal.Append(ColorTranslator.ToHtml(foreground));
\r
715 dispVal.Append("\">");
\r
716 dispVal.Append(text);
\r
717 dispVal.Append("</a>");
\r
718 return dispVal.ToString();
\r
723 private string GetHtmlForCell(TableCell cell, bool showLinks)
\r
725 StringWriter sw = new StringWriter();
\r
726 HtmlTextWriter htw = new HtmlTextWriter(sw);
\r
727 RenderBeginTag(htw);
\r
730 //sw.Write(GetCalendarText(,,true, ForeColor));
\r
731 //TODO: Implement me
\r
733 throw new NotImplementedException();
\r