\r
using System;\r
using System.Collections;\r
+using System.Globalization;\r
+using System.Text;\r
using System.Web;\r
using System.Web.UI;\r
+using System.Drawing;\r
\r
namespace System.Web.UI.WebControls\r
{\r
\r
private TableItemStyle dayHeaderStyle;\r
private TableItemStyle dayStyle;\r
+ private TableItemStyle nextPrevStyle;\r
private TableItemStyle otherMonthDayStyle;\r
private SelectedDatesCollection selectedDates;\r
private ArrayList selectedDatesList;\r
private TableItemStyle todayDayStyle;\r
private TableItemStyle weekendDayStyle;\r
\r
- private static readonly object DayRenderEvent = new object();\r
- private static readonly object SelectionChangedEvent = new object();\r
+ private static readonly object DayRenderEvent = new object();\r
+ private static readonly object SelectionChangedEvent = new object();\r
+ private static readonly object VisibleMonthChangedEvent = new object();\r
+ \r
+ private Color defaultTextColor;\r
+ private System.Globalization.Calendar globCal;\r
\r
public Calendar(): base()\r
{\r
}\r
}\r
\r
+ public TableItemStyle NextPrevStyle\r
+ {\r
+ get\r
+ {\r
+ if(nextPrevStyle == null)\r
+ nextPrevStyle = new TableItemStyle();\r
+ return nextPrevStyle;\r
+ }\r
+ }\r
+ \r
public TableItemStyle OtherMonthDayStyle\r
{\r
get\r
}\r
}\r
\r
+ public event MonthChangedEventHandler VisibleMonthChanged\r
+ {\r
+ add\r
+ {\r
+ Events.AddHandler(VisibleMonthChangedEvent, value);\r
+ }\r
+ remove\r
+ {\r
+ Events.RemoveHandler(VisibleMonthChangedEvent, value);\r
+ }\r
+ }\r
+ \r
protected virtual void OnDayRender(TableCell cell, CalendarDay day)\r
{\r
if(Events!=null)\r
}\r
}\r
\r
+ protected virtual void OnVisibleMonthChanged(DateTime newDate, DateTime prevDate)\r
+ {\r
+ if(Events!=null)\r
+ {\r
+ MonthChangedEventHandler mceh = (MonthChangedEventHandler)(Events[VisibleMonthChangedEvent]);\r
+ if(mceh!=null)\r
+ mceh(this, new MonthChangedEventArgs(newDate, prevDate));\r
+ }\r
+ }\r
+ \r
public void RaisePostBackEvent(string eventArgument)\r
{\r
- //TODO: THE LOST WORLD\r
+ //TODO: Implement Me\r
// Written to keep compile get going\r
}\r
\r
protected override void Render(HtmlTextWriter writer)\r
{\r
- //TODO: Ofcourse, I have to override this function\r
+ //TODO: Implement me\r
+ globCal = DateTimeFormatInfo.CurrentInfo.Calendar;\r
+ SetFirstCalendarDay(GetEffectiveVisibleDate());\r
+ /*\r
+ * ForeColor else defaultTextColor\r
+ * Draw a table\r
+ * if(ControlStyleCreated())\r
+ * then\r
+ * {\r
+ * ApplyStyle(ControlStyle)\r
+ * }\r
+ * GridLines?\r
+ * RenderBeginTag(writer)\r
+ * RenderTitle(writer, visibleDate from GetEffectiveVisibleDate, this.SelectionMode, IsEnabled)\r
+ * if(ShowHeader)\r
+ * RenderHeader(writer, visibleDate, SelectionMode, IsEnabled, \r
+ * RenderAllDays\r
+ * RenderEndTag(writer)\r
+ */\r
+ }\r
+ \r
+ protected override ControlCollection CreateControlCollection()\r
+ {\r
+ return new EmptyControlCollection(this);\r
+ }\r
+ \r
+ protected override void LoadViewState(object savedState)\r
+ {\r
+ if(savedState!=null)\r
+ {\r
+ //TODO: Implement me\r
+ //object[] states = (object[]) savedState;\r
+ //loadViewState of all the states/styles\r
+ }\r
+ }\r
+ \r
+ protected override object SaveViewState()\r
+ {\r
+ //TODO: Implement me\r
+ // SaveViewState of all the styles\r
+ }\r
+ \r
+ protected override void TrackViewState()\r
+ {\r
+ base.TrackViewState();\r
+ if(titleStyle!=null)\r
+ {\r
+ titleStyle.TrackViewState();\r
+ }\r
+ if(nextPrevStyle!=null)\r
+ {\r
+ nextPrevStyle.TrackViewState();\r
+ }\r
+ if(dayStyle!=null)\r
+ {\r
+ dayStyle.TrackViewState();\r
+ }\r
+ if(dayHeaderStyle!=null)\r
+ {\r
+ dayHeaderStyle.TrackViewState();\r
+ }\r
+ if(todayDayStyle!=null)\r
+ {\r
+ todayDayStyle.TrackViewState();\r
+ }\r
+ if(weekendDayStyle!=null)\r
+ {\r
+ weekendDayStyle.TrackViewState();\r
+ }\r
+ if(otherMonthStyle!=null)\r
+ {\r
+ otherMonthStyle.TrackViewState();\r
+ }\r
+ if(selectedDayStyle!=null)\r
+ {\r
+ selectedDayStyle.TrackViewState();\r
+ }\r
+ if(selectorStyle!=null)\r
+ {\r
+ selectorStyle.TrackViewState();\r
+ }\r
}\r
\r
//TODO: Recheck, I am through with all the functions?\r
+ \r
+ private void RenderAllDays(HtmlTextWriter writer, DateTime firstDay, DateTime activeDate, CalendarSelectionMode mode, bool isActive, bool isDownLevel)\r
+ {\r
+ //TODO: Implement me\r
+ /*\r
+ * "<tr>"\r
+ * "</tr>"\r
+ */\r
+ }\r
+ \r
+ private void RenderHeader(HtmlTextWriter writer, DateTime firstDay, CalendarSelectionMode mode, bool isActive, bool isDownLevel)\r
+ {\r
+ //TODO: Implement Me\r
+ /*\r
+ * "<tr>"\r
+ * "</tr>"\r
+ */\r
+ }\r
+ \r
+ private void RenderTitle(HtmlTextWriter writer, DateTime visibleDate, CalendarSelectionMode mode, bool isActive)\r
+ {\r
+ //TODO: Implement me\r
+ /*\r
+ * Make a row with the following contents: "<tr>"\r
+ * Draw a table, with cell having the following properties\r
+ * if(mode==CalendarSelectionMode.DayWeek || mode==CalendarSelectionMode.DayWeekMonth)\r
+ * then draw a column with colspan=8\r
+ * else\r
+ * draw with colspan=7\r
+ * set gridlines?\r
+ * set width\r
+ * set cellspacing\r
+ * ApplyStyleToTitle(table, cell, style)\r
+ * RenderBeginTag(writer)\r
+ * RenderBeginTag(writer)\r
+ * "<tr>"\r
+ * -> The next/previous months things\r
+ * GetCalendarText("previousMonth", PrevMonthText, NextPrevStyle.ForeColor, isActive)\r
+ * RenderCalendarCell(writer, cell, ^^^)\r
+ * ..\r
+ * ..\r
+ * Then for NextMonthText\r
+ * "</tr>"\r
+ * "</tr>"\r
+ */\r
+ }\r
+ \r
+ private void ApplyStyleToTitle(Table table, TableCell cell, TableItemStyle style)\r
+ {\r
+ //TODO: Implement me\r
+ /*\r
+ * Font\r
+ * Background color\r
+ * Foreground color\r
+ * Border color\r
+ * Border width\r
+ * Border style\r
+ * Vertical alignment\r
+ */\r
+ }\r
+ \r
+ private void RenderCalendarCell(HtmlTextWriter writer, TableCell cell, string text)\r
+ {\r
+ cell.RenderBeginTag(writer);\r
+ writer.Write(text);\r
+ cell.RenderEndTag(writer);\r
+ }\r
+ \r
+ private DateTime SetFirstCalendarDay(DateTime visibleDate)\r
+ {\r
+ globCal = visibleDate;\r
+ //TODO: Implement me\r
+ }\r
+ \r
+ private DateTime GetEffectiveVisibleDate()\r
+ {\r
+ DateTime dt = VisibleDate;\r
+ if(dt.Equals(DateTime.MinValue))\r
+ {\r
+ dt = TodaysDate;\r
+ }\r
+ return new DateTime(globCal.GetYear(dt), globCal.GetMonth(dt), globCal.GetDayOfMonth(dt), globCal);\r
+ }\r
+ \r
+ /*\r
+ * Creates text to be displayed, with all attributes if to be\r
+ * shown as a hyperlink\r
+ */\r
+ private string GetCalendarText(string eventArg, string text, Color foreground, bool isLink)\r
+ {\r
+ if(isLink)\r
+ {\r
+ StringBuilder dispVal = new StringBuilder();\r
+ dispVal.Append("<a href=\"");\r
+ dispVal.Append(Page.GetPostBackClientHyperlink(this, eventArg));\r
+ dispVal.Append("\" style=\"color: ");\r
+ if(foreground.IsEmpty)\r
+ {\r
+ dispVal.Append(ColorTranslater.ToHtml(defaultTextColor);\r
+ } else\r
+ {\r
+ dispVal.Append(ColorTranslater.ToHtml(foreground);\r
+ }\r
+ dispVal.Append("\">");\r
+ dispVal.Append(text);\r
+ dispVal.Append("</a>");\r
+ return dispVal.ToString();\r
+ }\r
+ return text;\r
+ }\r
+\r
+ private string GetHtmlForCell(TableCell cell, bool showLinks)\r
+ {\r
+ StringWriter sw = new StringWriter();\r
+ HtmlTextWriter htw = new HtmlTextWriter(sw);\r
+ RenderBeginTag(htw);\r
+ if(showLinks)\r
+ {\r
+ //sw.Write(GetCalendarText(,,true, ForeColor));\r
+ //TODO: Implement me\r
+ }\r
+ }\r
}\r
}\r