init commit

This commit is contained in:
roberti
2015-02-16 22:56:35 +01:00
commit a083e412fd
26 changed files with 5138 additions and 0 deletions

127
Web/Ui/Block.cs Normal file
View File

@@ -0,0 +1,127 @@
/*
Copyright <20> 2005 - 2008 Annpoint, s.r.o.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-------------------------------------------------------------------------
NOTE: Reuse requires the following acknowledgement (see also NOTICE):
This product includes DayPilot (http://www.daypilot.org) developed by Annpoint, s.r.o.
*/
using System;
using System.Collections;
namespace DayPilot.Web.Ui
{
/// <summary>
/// Block is a set of concurrent events.
/// </summary>
internal class Block
{
internal ArrayList Columns;
private ArrayList events = new ArrayList();
internal Block()
{
}
internal void Add(Event ev)
{
events.Add(ev);
arrangeColumns();
}
private Column createColumn()
{
Column col = new Column();
this.Columns.Add(col);
col.Block = this;
return col;
}
private void arrangeColumns()
{
// cleanup
this.Columns = new ArrayList();
foreach(Event e in events)
e.Column = null;
// there always will be at least one column because arrangeColumns is called only from Add()
createColumn();
foreach (Event e in events)
{
foreach (Column col in Columns)
{
if (col.CanAdd(e))
{
col.Add(e);
break;
}
}
// it wasn't placed
if (e.Column == null)
{
Column col = createColumn();
col.Add(e);
}
}
}
internal bool OverlapsWith(Event e)
{
if (events.Count == 0)
return false;
return (this.BoxStart < e.BoxEnd && this.BoxEnd > e.BoxStart);
}
internal DateTime BoxStart
{
get
{
DateTime min = DateTime.MaxValue;
foreach(Event ev in events)
{
if (ev.BoxStart < min)
min = ev.BoxStart;
}
return min;
}
}
internal DateTime BoxEnd
{
get
{
DateTime max = DateTime.MinValue;
foreach(Event ev in events)
{
if (ev.BoxEnd > max)
max = ev.BoxEnd;
}
return max;
}
}
}
}

119
Web/Ui/Column.cs Normal file
View File

@@ -0,0 +1,119 @@
/*
Copyright <20> 2005 - 2008 Annpoint, s.r.o.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-------------------------------------------------------------------------
NOTE: Reuse requires the following acknowledgement (see also NOTICE):
This product includes DayPilot (http://www.daypilot.org) developed by Annpoint, s.r.o.
*/
using System;
using System.Collections;
using DayPilot.Web.Ui;
namespace DayPilot.Web.Ui
{
/// <summary>
/// Column is a column of events in a Block.
/// </summary>
public class Column
{
private ArrayList events = new ArrayList();
internal Block Block;
/// <summary>
/// Gets the width of the column in percent.
/// </summary>
public int WidthPct
{
get
{
if (Block == null)
throw new ApplicationException("This Column does not belong to any Block.");
if (Block.Columns.Count == 0)
throw new ApplicationException("Internal error: Problem with Block.Column.Counts (it is zero).");
// the last block will be a bit longer to make sure the total width is 100%
if (isLastInBlock)
return 100 / Block.Columns.Count + 100 % Block.Columns.Count;
else
return 100 / Block.Columns.Count;
}
}
/// <summary>
/// Gets the starting percent of the column.
/// </summary>
public int StartsAtPct
{
get
{
if (Block == null)
throw new ApplicationException("This Column does not belong to any Block.");
if (Block.Columns.Count == 0)
throw new ApplicationException("Internal error: Problem with Block.Column.Counts (it is zero).");
return 100 / Block.Columns.Count * Number;
}
}
private bool isLastInBlock
{
get
{
return Block.Columns[Block.Columns.Count - 1] == this;
}
}
internal Column()
{
}
internal bool CanAdd(Event e)
{
foreach (Event ev in events)
{
if (ev.OverlapsWith(e))
return false;
}
return true;
}
internal void Add(Event e)
{
if (e.Column != null)
throw new ApplicationException("This Event was already placed into a Column.");
events.Add(e);
e.Column = this;
}
/// <summary>
/// Gets the order number of the column.
/// </summary>
public int Number
{
get
{
if (Block == null)
throw new ApplicationException("This Column doesn't belong to any Block.");
return Block.Columns.IndexOf(this);
}
}
}
}

236
Web/Ui/Day.cs Normal file
View File

@@ -0,0 +1,236 @@
/*
Copyright <20> 2005 - 2008 Annpoint, s.r.o.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-------------------------------------------------------------------------
NOTE: Reuse requires the following acknowledgement (see also NOTICE):
This product includes DayPilot (http://www.daypilot.org) developed by Annpoint, s.r.o.
*/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization;
namespace DayPilot.Web.Ui
{
/// <summary>
/// Day handles events of a single day.
/// </summary>
internal class Day : ISerializable
{
internal List<Event> events = new List<Event>();
private List<Block> blocks = new List<Block>();
internal int cellDuration; // in minutes
private DateTime start;
internal DateTime end;
internal string Name;
internal string Value;
internal DateTime Start
{
get { return start; }
}
internal DateTime End
{
get { return end; }
}
public Day(DateTime date)
{
this.start = date.Date;
this.end = date.Date.AddDays(1);
}
internal Day(DateTime start, DateTime end, string header, string id, int cellDuration)
{
this.start = start.Date;
this.end = end.Date;
this.Name = header;
this.Value = id;
this.cellDuration = cellDuration;
}
private void stripAndAddEvent(Event e)
{
stripAndAddEvent(e.Start, e.End, e.PK, e.Name, e.Resource, e.Owner);
}
private void stripAndAddEvent(DateTime start, DateTime end, string pk, string name, string resource, string owner)
{
if (!String.IsNullOrEmpty(Value)) // this applies to resources view only
{
if (Value != resource) // don't add events that don't belong to this column
return;
}
// the event happens before this day
if (end <= Start)
return;
// the event happens after this day
if (start >= End)
return;
// this is invalid event that does have no duration
if (start >= end)
return;
// fix the starting time
if (start < Start)
start = Start;
// fix the ending time
if (end > End)
end = End;
events.Add(new Event(pk, start, end, name, resource, owner));
}
/*
private void stripAndAddEvent(Event e)
{
if (!String.IsNullOrEmpty(Value)) // this applies to resources view only
{
if (Value != e.Resource) // don't add events that don't belong to this column
return;
}
// the event happens before this day
if (e.End <= Start)
return;
// the event happens after this day
if (e.Start >= End.AddDays(1))
return;
// this is invalid event that has no duration
if (e.Start >= e.End)
return;
// Event part = new Event(this, e);
events.Add(e);
}
*/
/// <summary>
/// Loads events from ArrayList of Events.
/// </summary>
/// <param name="events">ArrayList that contains the Events.</param>
public void Load(ArrayList events)
{
if (events == null)
{
return;
}
foreach (Event e in events)
{
stripAndAddEvent(e);
}
putIntoBlocks();
}
private void putIntoBlocks()
{
foreach (Event e in events)
{
// if there is no block, create the first one
if (lastBlock == null)
{
blocks.Add(new Block());
}
// or if the event doesn't overlap with the last block, create a new block
else if (!lastBlock.OverlapsWith(e))
{
blocks.Add(new Block());
}
// any case, add it to some block
lastBlock.Add(e);
}
}
private Block lastBlock
{
get
{
if (blocks.Count == 0)
return null;
return blocks[blocks.Count - 1];
}
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
}
internal int MaxColumns()
{
int i = 1;
foreach (Block b in blocks)
{
if (b.Columns.Count > i)
i = b.Columns.Count;
}
return i;
}
public DateTime BoxStart
{
get
{
DateTime min = DateTime.MaxValue;
foreach (Block block in blocks)
{
if (block.BoxStart < min)
min = block.BoxStart;
}
return min;
}
}
/// <summary>
/// The end of the box of the last event.
/// </summary>
public DateTime BoxEnd
{
get
{
DateTime max = DateTime.MinValue;
foreach (Block block in blocks)
{
if (block.BoxEnd > max)
max = block.BoxEnd;
}
return max;
}
}
}
}

909
Web/Ui/DayPilotCalendar.cs Normal file
View File

@@ -0,0 +1,909 @@
/*
Copyright <20> 2005 - 2008 Annpoint, s.r.o.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-------------------------------------------------------------------------
NOTE: Reuse requires the following acknowledgement (see also NOTICE):
This product includes DayPilot (http://www.daypilot.org) developed by Annpoint, s.r.o.
*/
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DayPilot.Web.Ui.Design;
namespace DayPilot.Web.Ui
{
/// <summary>
/// DayPilot is a component for showing a day schedule.
/// </summary>
[ToolboxBitmap(typeof(Calendar))]
[Designer(typeof(DayPilotCalendarDesigner))]
[AspNetHostingPermission(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal), AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public partial class DayPilotCalendar : DataBoundControl, IPostBackEventHandler
{
internal Day[] days;
private string dataStartField;
private string dataEndField;
private string dataTextField;
private string dataValueField;
private string dataOwnerField;
// day header
private bool showHeader = true;
private int headerHeight = 21;
private string headerDateFormat = "d";
private ArrayList items;
/// <summary>
/// Event called when the user clicks an event in the calendar. It's only called when EventClickHandling is set to PostBack.
/// </summary>
[Category("User actions")]
[Description("Event called when the user clicks an event in the calendar.")]
public event EventClickDelegate EventClick;
/// <summary>
/// Event called when the user clicks a free space in the calendar. It's only called when FreeTimeClickHandling is set to PostBack.
/// </summary>
[Category("User actions")]
[Description("Event called when the user clicks a free space in the calendar.")]
public event FreeClickDelegate FreeTimeClick;
#region Viewstate
/// <summary>
/// Loads ViewState.
/// </summary>
/// <param name="savedState"></param>
protected override void LoadViewState(object savedState)
{
if (savedState == null)
return;
object[] vs = (object[])savedState;
if (vs.Length != 2)
throw new ArgumentException("Wrong savedState object.");
if (vs[0] != null)
base.LoadViewState(vs[0]);
if (vs[1] != null)
items = (ArrayList)vs[1];
}
/// <summary>
/// Saves ViewState.
/// </summary>
/// <returns></returns>
protected override object SaveViewState()
{
object[] vs = new object[2];
vs[0] = base.SaveViewState();
vs[1] = items;
return vs;
}
#endregion
#region PostBack
/// <summary>
///
/// </summary>
/// <param name="eventArgument"></param>
public void RaisePostBackEvent(string eventArgument)
{
if (eventArgument.StartsWith("PK:"))
{
string pk = eventArgument.Substring(3, eventArgument.Length - 3);
if (EventClick != null)
EventClick(this, new EventClickEventArgs(pk));
}
else if (eventArgument.StartsWith("TIME:"))
{
DateTime time = Convert.ToDateTime(eventArgument.Substring(5, eventArgument.Length - 5));
if (FreeTimeClick != null)
FreeTimeClick(this, new FreeClickEventArgs(time));
}
else
{
throw new ArgumentException("Bad argument passed from postback event.");
}
}
#endregion
#region Rendering
/// <summary>
/// Renders the component HTML code.
/// </summary>
/// <param name="output"></param>
protected override void Render(HtmlTextWriter output)
{
loadEventsToDays();
// <table>
output.AddAttribute("id", ClientID);
output.AddAttribute("cellpadding", "0");
output.AddAttribute("cellspacing", "0");
output.AddAttribute("border", "0");
output.AddAttribute("width", Width.ToString());
output.AddStyleAttribute("border-bottom", "1px solid " + ColorTranslator.ToHtml(BorderColor));
output.AddStyleAttribute("text-align", "left");
output.RenderBeginTag("table");
// <tr>
output.RenderBeginTag("tr");
// <td>
output.AddAttribute("valign", "top");
output.RenderBeginTag("td");
if (ShowHours)
renderHourNamesTable(output);
// </td>
output.RenderEndTag();
// <td>
output.AddAttribute("width", "100%");
output.AddAttribute("valign", "top");
output.RenderBeginTag("td");
renderEventsAndCells(output);
// </td>
output.RenderEndTag();
// </tr>
output.RenderEndTag();
// </table>
output.RenderEndTag();
}
private void renderHourNamesTable(HtmlTextWriter output)
{
// output.WriteLine("<!-- hours table -->");
output.AddAttribute("cellpadding", "0");
output.AddAttribute("cellspacing", "0");
output.AddAttribute("border", "0");
output.AddAttribute("width", this.HourWidth.ToString());
output.AddStyleAttribute("border-left", "1px solid " + ColorTranslator.ToHtml(BorderColor));
output.RenderBeginTag("table");
// <tr> first emtpy
output.AddStyleAttribute("height", "1px");
output.AddStyleAttribute("background-color", ColorTranslator.ToHtml(BorderColor));
output.RenderBeginTag("tr");
output.RenderBeginTag("td");
output.RenderEndTag();
// </tr> first empty
output.RenderEndTag();
if (this.ShowHeader)
renderHourHeader(output);
for (DateTime i = visibleStart; i < visibleEnd; i = i.AddHours(1))
{
renderHourTr(output, i);
}
// </table>
output.RenderEndTag();
}
private void renderHourTr(HtmlTextWriter output, DateTime i)
{
// <tr>
output.AddStyleAttribute("height", HourHeight + "px");
output.RenderBeginTag("tr");
// <td>
output.AddAttribute("valign", "bottom");
output.AddStyleAttribute("background-color", ColorTranslator.ToHtml(HourNameBackColor));
output.AddStyleAttribute("cursor", "default");
output.RenderBeginTag("td");
// <div> block
// DivWriter divBlock = new DivWriter();
output.AddStyleAttribute("display", "block");
output.AddStyleAttribute("border-bottom", "1px solid " + ColorTranslator.ToHtml(HourNameBorderColor));
output.AddStyleAttribute("height", (HourHeight - 1) + "px");
output.AddStyleAttribute("text-align", "right");
output.RenderBeginTag("div");
// output.Write(divBlock.BeginTag());
// <div> text
// DivWriter divText = new DivWriter();
output.AddStyleAttribute("padding", "2px");
output.AddStyleAttribute("font-family", HourFontFamily);
output.AddStyleAttribute("font-size", HourFontSize);
output.RenderBeginTag("div");
// output.Write(divText.BeginTag());
int hour = i.Hour;
bool am = (i.Hour / 12) == 0;
if (TimeFormat == TimeFormat.Clock12Hours)
{
hour = i.Hour % 12;
if (hour == 0)
hour = 12;
}
output.Write(hour);
output.Write("<span style='font-size:10px; vertical-align: super; '>&nbsp;");
if (TimeFormat == TimeFormat.Clock24Hours)
{
output.Write("00");
}
else
{
if (am)
output.Write("AM");
else
output.Write("PM");
}
output.Write("</span>");
output.RenderEndTag();
output.RenderEndTag();
// output.Write(divText.EndTag());
// output.Write(divBlock.EndTag());
output.RenderEndTag(); // </td>
output.RenderEndTag(); // </tr>
}
private void renderHourHeader(HtmlTextWriter output)
{
// <tr>
output.AddStyleAttribute("height", (this.HeaderHeight) + "px");
output.RenderBeginTag("tr");
// <td>
output.AddAttribute("valign", "bottom");
output.AddStyleAttribute("background-color", ColorTranslator.ToHtml(HourNameBackColor));
output.AddStyleAttribute("cursor", "default");
output.RenderBeginTag("td");
// <div> block
// DivWriter divBlock = new DivWriter();
output.AddStyleAttribute("display", "block");
output.AddStyleAttribute("border-bottom", "1px solid " + ColorTranslator.ToHtml(BorderColor));
output.AddStyleAttribute("text-align", "right");
output.RenderBeginTag("div");
// output.Write(divBlock.BeginTag());
// <div> text
// DivWriter divText = new DivWriter();
output.AddStyleAttribute("padding", "2px");
output.AddStyleAttribute("font-size", "6pt");
output.RenderBeginTag("div");
// output.Write(divText.BeginTag());
output.Write("&nbsp;");
output.RenderEndTag();
output.RenderEndTag();
// output.Write(divText.EndTag());
// output.Write(divBlock.EndTag());
output.RenderEndTag(); // </td>
output.RenderEndTag(); // </tr>
}
private void renderEventsAndCells(HtmlTextWriter output)
{
// output.WriteLine("<!-- cells table -->");
if (days != null)
{
// <table>
output.AddAttribute("cellpadding", "0");
output.AddAttribute("cellspacing", "0");
output.AddAttribute("border", "0");
output.AddAttribute("width", "100%");
output.AddStyleAttribute("border-left", "1px solid " + ColorTranslator.ToHtml(BorderColor));
output.RenderBeginTag("table");
// <tr> first
output.AddStyleAttribute("height", "1px");
output.AddStyleAttribute("background-color", ColorTranslator.ToHtml(BorderColor));
output.RenderBeginTag("tr");
renderEventTds(output);
// </tr> first
output.RenderEndTag();
// header
if (this.ShowHeader)
{
renderDayHeaders(output);
}
}
output.WriteLine("<!-- empty cells -->");
// render all cells
for (DateTime i = visibleStart; i < visibleEnd; i = i.AddHours(1))
{
// <tr> first half-hour
output.RenderBeginTag("tr");
addHalfHourCells(output, i, true, false);
// </tr>
output.RenderEndTag();
// <tr> second half-hour
output.AddStyleAttribute("height", (HourHeight / 2) + "px");
output.RenderBeginTag("tr");
bool isLastRow = (i == visibleEnd.AddHours(-1));
addHalfHourCells(output, i, false, isLastRow);
// </tr>
output.RenderEndTag();
}
// </table>
output.RenderEndTag();
}
private void renderDayHeaders(HtmlTextWriter output)
{
output.AddStyleAttribute("background-color", ColorTranslator.ToHtml(HourNameBackColor));
output.AddStyleAttribute("height", this.HeaderHeight + "px");
output.RenderBeginTag("tr");
foreach (Day d in days)
{
DateTime h = new DateTime(d.Start.Year, d.Start.Month, d.Start.Day, 0, 0, 0);
// <td>
output.AddAttribute("valign", "bottom");
output.AddStyleAttribute("background-color", ColorTranslator.ToHtml(HourNameBackColor));
output.AddStyleAttribute("cursor", "default");
output.AddStyleAttribute("border-right", "1px solid " + ColorTranslator.ToHtml(BorderColor));
output.RenderBeginTag("td");
// <div> block
// DivWriter divBlock = new DivWriter();
output.AddStyleAttribute("display", "block");
output.AddStyleAttribute("border-bottom", "1px solid " + ColorTranslator.ToHtml(BorderColor));
output.AddStyleAttribute("text-align", "center");
output.RenderBeginTag("div");
// output.Write(divBlock.BeginTag());
// <div> text
// DivWriter divText = new DivWriter();
output.AddStyleAttribute("padding", "2px");
output.AddStyleAttribute("font-family", DayFontFamily);
output.AddStyleAttribute("font-size", DayFontSize);
output.RenderBeginTag("div");
// output.Write(divText.BeginTag());
output.Write(h.ToString(this.headerDateFormat));
// output.Write("&nbsp;");
output.RenderEndTag();
output.RenderEndTag();
// output.Write(divText.EndTag());
// output.Write(divBlock.EndTag());
output.RenderEndTag(); // </td>
}
output.RenderEndTag();
}
private void renderEventTds(HtmlTextWriter output)
{
int dayPctWidth = 100 / days.Length;
for (int i = 0; i < days.Length; i++)
{
Day d = days[i];
// <td>
output.AddStyleAttribute("height", "1px");
output.AddStyleAttribute("text-align", "left");
output.AddAttribute("width", dayPctWidth + "%");
output.RenderBeginTag("td");
// <div> position
// DivWriter divPosition = new DivWriter();
output.AddStyleAttribute("display", "block");
output.AddStyleAttribute("margin-right", ColumnMarginRight + "px");
output.AddStyleAttribute("position", "relative");
output.AddStyleAttribute("height", "1px");
output.AddStyleAttribute("font-size", "1px");
output.AddStyleAttribute("margin-top", "-1px");
output.RenderBeginTag("div");
// output.Write(divPosition.BeginTag());
foreach (Event e in d.events)
{
renderEvent(output, e, d);
}
// </div> position
// output.Write(divPosition.EndTag());
output.RenderEndTag();
// </td>
output.RenderEndTag();
}
}
private void renderEvent(HtmlTextWriter output, Event e, Day d)
{
string displayTextPopup = e.Name + " (" + e.Start.ToShortTimeString() + " - " + e.End.ToShortTimeString() + ")"+":"+e.Owner;
string displayText = e.Name + ": " + e.Owner;
// real box dimensions and position
DateTime dayVisibleStart = new DateTime(d.Start.Year, d.Start.Month, d.Start.Day, visibleStart.Hour, 0, 0);
DateTime realBoxStart = e.BoxStart < dayVisibleStart ? dayVisibleStart : e.BoxStart;
DateTime dayVisibleEnd;
if (visibleEnd.Day == 1)
dayVisibleEnd = new DateTime(d.Start.Year, d.Start.Month, d.Start.Day, visibleEnd.Hour, 0, 0);
else if (visibleEnd.Day == 2)
dayVisibleEnd = new DateTime(d.Start.Year, d.Start.Month, d.Start.Day, visibleEnd.Hour, 0, 0).AddDays(1);
else
throw new ArgumentOutOfRangeException("Unexpected time for dayVisibleEnd.");
DateTime realBoxEnd = e.BoxEnd > dayVisibleEnd ? dayVisibleEnd : e.BoxEnd;
// top
double top = (realBoxStart - dayVisibleStart).TotalHours * HourHeight + 1;
if (ShowHeader)
top += this.HeaderHeight;
// height
double height = ((realBoxEnd - realBoxStart).TotalHours * HourHeight - 2);
// It's outside of visible area (for NonBusinessHours set to Hide).
// Don't draw it in that case.
if (height <= 0)
{
return;
}
// MAIN BOX
output.AddAttribute("onselectstart", "return false;"); // prevent text selection in IE
if (EventClickHandling == UserActionHandling.PostBack)
{
output.AddAttribute("onclick", "javascript:event.cancelBubble=true;" + Page.ClientScript.GetPostBackEventReference(this, "PK:" + e.PK));
}
else
{
output.AddAttribute("onclick", "javascript:event.cancelBubble=true;" + String.Format(EventClickJavaScript, e.PK));
}
output.AddStyleAttribute("-moz-user-select", "none"); // prevent text selection in FF
output.AddStyleAttribute("-khtml-user-select", "none"); // prevent text selection
output.AddStyleAttribute("user-select", "none"); // prevent text selection
output.AddStyleAttribute("cursor", "pointer");
//output.AddStyleAttribute("cursor", "hand");
output.AddStyleAttribute("position", "absolute");
output.AddStyleAttribute("font-family", EventFontFamily);
output.AddStyleAttribute("font-size", EventFontSize);
output.AddStyleAttribute("white-space", "no-wrap");
output.AddStyleAttribute("left", e.Column.StartsAtPct + "%");
output.AddStyleAttribute("top", top + "px");
output.AddStyleAttribute("width", e.Column.WidthPct + "%");
output.AddStyleAttribute("height", (realBoxEnd - realBoxStart).TotalHours * HourHeight + "px");
output.AddStyleAttribute("background-color", ColorTranslator.ToHtml(EventBorderColor));
output.RenderBeginTag("div");
//output.Write(divMain.BeginTag());
// FIX BOX - to fix the outer/inner box differences in Mozilla/IE (to create border)
// DivWriter divFix = new DivWriter();
output.AddAttribute("onmouseover", "this.style.backgroundColor='" + ColorTranslator.ToHtml(EventHoverColor) + "';event.cancelBubble=true;");
output.AddAttribute("onmouseout", "this.style.backgroundColor='" + ColorTranslator.ToHtml(EventBackColor) + "';event.cancelBubble=true;");
if (ShowToolTip)
{
output.AddAttribute("title", displayTextPopup);
}
output.AddStyleAttribute("margin-top", "1px");
output.AddStyleAttribute("display", "block");
output.AddStyleAttribute("height", height + "px");
output.AddStyleAttribute("background-color", ColorTranslator.ToHtml(EventBackColor));
output.AddStyleAttribute("border-left", "1px solid " + ColorTranslator.ToHtml(EventBorderColor));
output.AddStyleAttribute("border-right", "1px solid " + ColorTranslator.ToHtml(EventBorderColor));
output.AddStyleAttribute("overflow", "hidden");
output.RenderBeginTag("div");
// output.Write(divFix.BeginTag());
// blue column
if (e.Start > realBoxStart)
{
}
int startDelta = (int) Math.Floor((e.Start - realBoxStart).TotalHours * HourHeight);
int endDelta = (int) Math.Floor((realBoxEnd - e.End).TotalHours * HourHeight);
// DivWriter divBlue = new DivWriter();
output.AddStyleAttribute("float", "left");
output.AddStyleAttribute("width", "5px");
output.AddStyleAttribute("height", height - startDelta - endDelta + "px");
output.AddStyleAttribute("margin-top", startDelta + "px");
output.AddStyleAttribute("background-color", ColorTranslator.ToHtml(DurationBarColor));
output.AddStyleAttribute("font-size", "1px");
output.RenderBeginTag("div");
output.RenderEndTag();
// output.Write(divBlue.BeginTag());
// output.Write(divBlue.EndTag());
// right border of blue column
// DivWriter divBorder = new DivWriter();
output.AddStyleAttribute("float", "left");
output.AddStyleAttribute("width", "1px");
output.AddStyleAttribute("background-color", ColorTranslator.ToHtml(EventBorderColor));
output.AddStyleAttribute("height", "100%");
output.RenderBeginTag("div");
output.RenderEndTag();
// output.Write(divBorder.BeginTag());
// output.Write(divBorder.EndTag());
// space
// DivWriter divSpace = new DivWriter();
output.AddStyleAttribute("float", "left");
output.AddStyleAttribute("width", "2px");
output.AddStyleAttribute("height", "100%");
output.RenderBeginTag("div");
output.RenderEndTag();
// output.Write(divSpace.BeginTag());
// output.Write(divSpace.EndTag());
// PADDING BOX
// DivWriter divPadding = new DivWriter();
output.AddStyleAttribute("padding", "1px");
output.RenderBeginTag("div");
// output.Write(divPadding.BeginTag());
output.Write(displayText); // e.BoxStart - dayVisibleStart
// closing the PADDING BOX
output.RenderEndTag();
// output.Write(divPadding.EndTag());
// closing the FIX BOX
output.RenderEndTag();
// output.Write(divFix.EndTag());
// closing the MAIN BOX
// output.Write(divMain.EndTag());
output.RenderEndTag();
}
private void addHalfHourCells(HtmlTextWriter output, DateTime hour, bool hourStartsHere, bool isLast)
{
foreach (Day d in days)
{
DateTime h = new DateTime(d.Start.Year, d.Start.Month, d.Start.Day, hour.Hour, 0, 0);
addHalfHourCell(output, h, hourStartsHere, isLast);
}
}
private void addHalfHourCell(HtmlTextWriter output, DateTime hour, bool hourStartsHere, bool isLast)
{
string cellBgColor;
if (hour.Hour < BusinessBeginsHour || hour.Hour >= BusinessEndsHour || hour.DayOfWeek == DayOfWeek.Saturday || hour.DayOfWeek == DayOfWeek.Sunday)
cellBgColor = ColorTranslator.ToHtml(NonBusinessBackColor);
else
cellBgColor = ColorTranslator.ToHtml(BackColor);
string borderBottomColor;
if (hourStartsHere)
borderBottomColor = ColorTranslator.ToHtml(HourHalfBorderColor);
else
borderBottomColor = ColorTranslator.ToHtml(HourBorderColor);
DateTime startingTime = hour;
if (!hourStartsHere)
startingTime = hour.AddMinutes(30);
if (FreetimeClickHandling == UserActionHandling.PostBack)
{
output.AddAttribute("onclick", "javascript:" + Page.ClientScript.GetPostBackEventReference(this, "TIME:" + startingTime.ToString("s")));
}
else
{
output.AddAttribute("onclick", "javascript:" + String.Format(FreeTimeClickJavaScript, startingTime.ToString("s")));
}
output.AddAttribute("onmouseover", "this.style.backgroundColor='" + ColorTranslator.ToHtml(HoverColor) + "';");
output.AddAttribute("onmouseout", "this.style.backgroundColor='" + cellBgColor + "';");
output.AddAttribute("valign", "bottom");
output.AddStyleAttribute("background-color", cellBgColor);
output.AddStyleAttribute("cursor", "pointer");
output.AddStyleAttribute("cursor", "hand");
output.AddStyleAttribute("border-right", "1px solid " + ColorTranslator.ToHtml(BorderColor));
output.AddStyleAttribute("height", (HourHeight / 2) + "px");
output.RenderBeginTag("td");
// FIX BOX - to fix the outer/inner box differences in Mozilla/IE (to create border)
// DivWriter divFix = new DivWriter();
output.AddStyleAttribute("display", "block");
output.AddStyleAttribute("height", "14px");
if (!isLast)
output.AddStyleAttribute("border-bottom", "1px solid " + borderBottomColor);
output.RenderBeginTag("div");
// output.Write(divFix.BeginTag());
// required
output.Write("<span style='font-size:1px'>&nbsp;</span>");
// closing the FIX BOX
output.RenderEndTag();
// output.Write(divFix.EndTag());
// </td>
output.RenderEndTag();
}
#endregion
#region Calculations
/// <summary>
/// This is only a relative time. The date part should be ignored.
/// </summary>
private DateTime visibleStart
{
get
{
DateTime date = new DateTime(1900, 1, 1);
if (NonBusinessHours == NonBusinessHoursBehavior.Show)
return new DateTime(date.Year, date.Month, date.Day, 0, 0, 0);
DateTime start = new DateTime(date.Year, date.Month, date.Day, BusinessBeginsHour, 0, 0);
if (NonBusinessHours == NonBusinessHoursBehavior.Hide)
return start;
if (days == null)
return start;
if (totalEvents == 0)
return start;
foreach (Day d in days)
{
DateTime boxStart = new DateTime(date.Year, date.Month, date.Day, d.BoxStart.Hour, d.BoxStart.Minute, d.BoxStart.Second);
if (boxStart < start)
start = boxStart;
}
return new DateTime(start.Year, start.Month, start.Day, start.Hour, 0, 0);
}
}
/// <summary>
/// This is only a relative time. The date part should be ignored.
/// </summary>
private DateTime visibleEnd
{
get
{
DateTime date = new DateTime(1900, 1, 1);
if (NonBusinessHours == NonBusinessHoursBehavior.Show)
return new DateTime(date.Year, date.Month, date.Day, 0, 0, 0).AddDays(1);
DateTime end;
if (BusinessEndsHour == 24)
end = new DateTime(date.Year, date.Month, date.Day, 0, 0, 0).AddDays(1);
else
end = new DateTime(date.Year, date.Month, date.Day, BusinessEndsHour, 0, 0);
if (NonBusinessHours == NonBusinessHoursBehavior.Hide)
return end;
if (days == null)
return end;
if (totalEvents == 0)
return end;
foreach (Day d in days)
{
bool addDay = false;
if (d.BoxEnd > DateTime.MinValue && d.BoxEnd.AddDays(-1) >= d.Start)
addDay = true;
DateTime boxEnd = new DateTime(date.Year, date.Month, date.Day, d.BoxEnd.Hour, d.BoxEnd.Minute, d.BoxEnd.Second);
if (addDay)
boxEnd = boxEnd.AddDays(1);
if (boxEnd > end)
end = boxEnd;
}
if (end.Minute != 0)
end = end.AddHours(1);
return new DateTime(end.Year, end.Month, end.Day, end.Hour, 0, 0);
}
}
private int totalEvents
{
get
{
int ti = 0;
foreach (Day d in days)
ti += d.events.Count;
return ti;
}
}
#endregion
#region Data binding
protected override void PerformSelect()
{
// Call OnDataBinding here if bound to a data source using the
// DataSource property (instead of a DataSourceID), because the
// databinding statement is evaluated before the call to GetData.
if (!IsBoundUsingDataSourceID)
{
this.OnDataBinding(EventArgs.Empty);
}
// The GetData method retrieves the DataSourceView object from
// the IDataSource associated with the data-bound control.
GetData().Select(CreateDataSourceSelectArguments(),
this.OnDataSourceViewSelectCallback);
// The PerformDataBinding method has completed.
RequiresDataBinding = false;
MarkAsDataBound();
// Raise the DataBound event.
OnDataBound(EventArgs.Empty);
}
private void OnDataSourceViewSelectCallback(IEnumerable retrievedData)
{
// Call OnDataBinding only if it has not already been
// called in the PerformSelect method.
if (IsBoundUsingDataSourceID)
{
OnDataBinding(EventArgs.Empty);
}
// The PerformDataBinding method binds the data in the
// retrievedData collection to elements of the data-bound control.
PerformDataBinding(retrievedData);
}
protected override void PerformDataBinding(IEnumerable retrievedData)
{
// don't load events in design mode
if (DesignMode)
{
return;
}
base.PerformDataBinding(retrievedData);
if (DataStartField == null || DataStartField == String.Empty)
throw new NullReferenceException("DataStartField property must be specified.");
if (DataEndField == null || DataEndField == String.Empty)
throw new NullReferenceException("DataEndField property must be specified.");
if (DataTextField == null || DataTextField == String.Empty)
throw new NullReferenceException("DataTextField property must be specified.");
if (DataValueField == null || DataValueField == String.Empty)
throw new NullReferenceException("DataValueField property must be specified.");
if (DataOwnerField == null || DataOwnerField == String.Empty)
throw new NullReferenceException("DataOwnerField property must be specified.");
// Verify data exists.
if (retrievedData != null)
{
items = new ArrayList();
foreach (object dataItem in retrievedData)
{
DateTime start = Convert.ToDateTime(DataBinder.GetPropertyValue(dataItem, DataStartField, null));
DateTime end = Convert.ToDateTime(DataBinder.GetPropertyValue(dataItem, DataEndField, null));
string name = Convert.ToString(DataBinder.GetPropertyValue(dataItem, DataTextField, null));
string pk = Convert.ToString(DataBinder.GetPropertyValue(dataItem, DataValueField, null));
string own = Convert.ToString(DataBinder.GetPropertyValue(dataItem, DataOwnerField, null));
items.Add(new Event(pk, start, end, name, null, own));
}
items.Sort(new EventComparer());
// loadEventsToDays();
}
}
private void loadEventsToDays()
{
if (EndDate < StartDate)
throw new ArgumentException("EndDate must be equal to or greater than StartDate.");
int dayCount = (int)(EndDate - StartDate).TotalDays + 1;
days = new Day[dayCount];
for (int i = 0; i < days.Length; i++)
{
days[i] = new Day(StartDate.AddDays(i));
if (items != null)
days[i].Load(items);
}
}
#endregion
}
}

View File

@@ -0,0 +1,825 @@
/*
Copyright <20> 2005 - 2008 Annpoint, s.r.o.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-------------------------------------------------------------------------
NOTE: Reuse requires the following acknowledgement (see also NOTICE):
This product includes DayPilot (http://www.daypilot.org) developed by Annpoint, s.r.o.
*/
using System;
using System.ComponentModel;
using System.Drawing;
using System.Web.UI.WebControls;
namespace DayPilot.Web.Ui
{
public partial class DayPilotCalendar
{
/// <summary>
/// Gets or sets the start of the business day (in hours).
/// </summary>
[Description("Start of the business day (hour from 0 to 23).")]
[Category("Appearance")]
[DefaultValue(9)]
public int BusinessBeginsHour
{
get
{
if (ViewState["BusinessBeginsHour"] == null)
return 9;
return (int)ViewState["BusinessBeginsHour"];
}
set
{
if (value < 0)
ViewState["BusinessBeginsHour"] = 0;
else if (value > 23)
ViewState["BusinessBeginsHour"] = 23;
else
ViewState["BusinessBeginsHour"] = value;
}
}
/// <summary>
/// Gets or sets the end of the business day (hours).
/// </summary>
[Description("End of the business day (hour from 1 to 24).")]
[Category("Appearance")]
[DefaultValue(18)]
public int BusinessEndsHour
{
get
{
if (ViewState["BusinessEndsHour"] == null)
return 18;
return (int)ViewState["BusinessEndsHour"];
}
set
{
if (value < BusinessBeginsHour)
ViewState["BusinessEndsHour"] = BusinessBeginsHour + 1;
else if (value > 24)
ViewState["BusinessEndsHour"] = 24;
else
ViewState["BusinessEndsHour"] = value;
}
}
/// <summary>
/// Gets or sets the height of the hour cell in pixels. Must be even.
/// </summary>
[Description("Height of the hour cell in pixels. Must be even.")]
[Category("Layout")]
[DefaultValue(40)]
public int HourHeight
{
get
{
if (ViewState["HourHeight"] == null)
return 40;
return (int)ViewState["HourHeight"];
}
set
{
if (value % 2 == 0)
ViewState["HourHeight"] = value;
else
ViewState["HourHeight"] = value - 1;
}
}
/// <summary>
/// Gets or sets the width of the hour cell in pixels.
/// </summary>
[Description("Width of the hour cell in pixels.")]
[Category("Layout")]
[DefaultValue(40)]
public int HourWidth
{
get
{
if (ViewState["HourWidth"] == null)
return 40;
return (int)ViewState["HourWidth"];
}
set
{
ViewState["HourWidth"] = value;
}
}
/// <summary>
/// Gets or sets the Javascript code that is executed when the users clicks on an event. '{0}' will be replaced by the primary key of the event.
/// </summary>
[Description("Javascript code that is executed when the users clicks on an event. '{0}' will be replaced by the primary key of the event.")]
[Category("User actions")]
[DefaultValue("alert('{0}');")]
public string EventClickJavaScript
{
get
{
if (ViewState["EventClickJavaScript"] == null)
return "alert('{0}');";
return (string)ViewState["EventClickJavaScript"];
}
set
{
ViewState["EventClickJavaScript"] = value;
}
}
/// <summary>
/// Gets or sets the Javascript code that is executed when the users clicks on a free time slot. '{0}' will be replaced by the starting time of that slot (i.e. '9:00'.
/// </summary>
[Description("Javascript code that is executed when the users clicks on a free time slot. '{0}' will be replaced by the starting time of that slot (i.e. '9:00'.")]
[Category("User actions")]
[DefaultValue("alert('{0}');")]
public string FreeTimeClickJavaScript
{
get
{
if (ViewState["FreeTimeClickJavaScript"] == null)
return "alert('{0}');";
return (string)ViewState["FreeTimeClickJavaScript"];
}
set
{
ViewState["FreeTimeClickJavaScript"] = value;
}
}
/// <summary>
/// Gets or sets the first day to be shown. Default is DateTime.Today.
/// </summary>
[Description("The first day to be shown. Default is DateTime.Today.")]
public DateTime StartDate
{
get
{
if (ViewState["StartDate"] == null)
{
return DateTime.Today;
}
return (DateTime)ViewState["StartDate"];
}
set
{
ViewState["StartDate"] = new DateTime(value.Year, value.Month, value.Day);
}
}
/// <summary>
/// Gets or sets the number of days to be displayed. Default is 1.
/// </summary>
[Description("The number of days to be displayed on the calendar. Default value is 1.")]
[DefaultValue(1)]
public int Days
{
get
{
if (ViewState["Days"] == null)
return 1;
return (int)ViewState["Days"];
}
set
{
int daysCount = value;
if (daysCount < 1)
daysCount = 1;
ViewState["Days"] = daysCount;
}
}
/// <summary>
/// Gets the last day to be shown.
/// </summary>
public DateTime EndDate
{
get
{
return StartDate.AddDays(Days - 1);
}
}
/// <summary>
/// Gets or sets the name of the column that contains the event starting date and time (must be convertible to DateTime).
/// </summary>
[Description("The name of the column that contains the event starting date and time (must be convertible to DateTime).")]
[Category("Data")]
public string DataStartField
{
get
{
return dataStartField;
}
set
{
dataStartField = value;
if (Initialized)
{
OnDataPropertyChanged();
}
}
}
/// <summary>
/// Gets or sets the name of the column that contains the event ending date and time (must be convertible to DateTime).
/// </summary>
[Description("The name of the column that contains the event ending date and time (must be convertible to DateTime).")]
[Category("Data")]
public string DataEndField
{
get
{
return dataEndField;
}
set
{
dataEndField = value;
if (Initialized)
{
OnDataPropertyChanged();
}
}
}
/// <summary>
/// Gets or sets the name of the column that contains the name of an event.
/// </summary>
[Category("Data")]
[Description("The name of the column that contains the name of an event.")]
public string DataTextField
{
get
{
return dataTextField;
}
set
{
dataTextField = value;
if (Initialized)
{
OnDataPropertyChanged();
}
}
}
/// <summary>
/// Gets or sets the name of the column that contains the primary key. The primary key will be used for rendering the custom JavaScript actions.
/// </summary>
[Category("Data")]
[Description("The name of the column that contains the primary key. The primary key will be used for rendering the custom JavaScript actions.")]
public string DataValueField
{
get
{
return dataValueField;
}
set
{
dataValueField = value;
if (Initialized)
{
OnDataPropertyChanged();
}
}
}
[Category("Data")]
[Description("The name of the owner field")]
public string DataOwnerField
{
get
{
return dataOwnerField;
}
set
{
dataOwnerField = value;
if (Initialized)
{
OnDataPropertyChanged();
}
}
}
/// <summary>
/// Gets or sets whether the hour numbers should be visible.
/// </summary>
[Category("Appearance")]
[Description("Should the hour numbers be visible?")]
[DefaultValue(true)]
public bool ShowHours
{
get
{
if (ViewState["ShowHours"] == null)
return true;
return (bool)ViewState["ShowHours"];
}
set
{
ViewState["ShowHours"] = value;
}
}
/// <summary>
/// Gets or sets the time-format for hour numbers (on the left).
/// </summary>
[Category("Appearance")]
[Description("The time-format that will be used for the hour numbers.")]
[DefaultValue(TimeFormat.Clock12Hours)]
public TimeFormat TimeFormat
{
get
{
if (ViewState["TimeFormat"] == null)
return TimeFormat.Clock12Hours;
return (TimeFormat)ViewState["TimeFormat"];
}
set
{
ViewState["TimeFormat"] = value;
}
}
/// <summary>
/// Gets or sets the drawing mode of non-business hours.
/// </summary>
[Category("Appearance")]
[Description("Determines whether the control shows the non-business hours.")]
[DefaultValue(NonBusinessHoursBehavior.HideIfPossible)]
public NonBusinessHoursBehavior NonBusinessHours
{
get
{
if (ViewState["NonBusinessHours"] == null)
return NonBusinessHoursBehavior.HideIfPossible;
return (NonBusinessHoursBehavior)ViewState["NonBusinessHours"];
}
set
{
ViewState["NonBusinessHours"] = value;
}
}
/// <summary>
/// Handling of user action (clicking an event).
/// </summary>
[Category("User actions")]
[Description("Whether clicking an event should do a postback or run a javascript action. By default, it calls the javascript code specified in EventClickJavaScript property.")]
[DefaultValue(UserActionHandling.JavaScript)]
public UserActionHandling EventClickHandling
{
get
{
if (ViewState["EventClickHandling"] == null)
return UserActionHandling.JavaScript;
return (UserActionHandling)ViewState["EventClickHandling"];
}
set
{
ViewState["EventClickHandling"] = value;
}
}
/// <summary>
/// Handling of user action (clicking a free-time slot).
/// </summary>
[Category("User actions")]
[Description("Whether clicking a free-time slot should do a postback or run a javascript action. By default, it calls the javascript code specified in FreeTimeClickJavaScript property.")]
[DefaultValue(UserActionHandling.JavaScript)]
public UserActionHandling FreetimeClickHandling
{
get
{
if (ViewState["FreeTimeClickHandling"] == null)
return UserActionHandling.JavaScript;
return (UserActionHandling)ViewState["FreeTimeClickHandling"];
}
set
{
ViewState["FreeTimeClickHandling"] = value;
}
}
//headerDateFormat
/// <summary>
/// Gets or sets the format of the date display in the header columns.
/// </summary>
[Description("Format of the date display in the header columns.")]
[Category("Appearance")]
[DefaultValue("d")]
public string HeaderDateFormat
{
get
{
return headerDateFormat;
}
set
{
headerDateFormat = value;
}
}
/// <summary>
/// Gets or sets whether the header should be visible.
/// </summary>
[Category("Appearance")]
[Description("Should the header be visible?")]
[DefaultValue(true)]
public bool ShowHeader
{
get
{
return showHeader;
}
set
{
showHeader = value;
}
}
/// <summary>
/// Gets or sets whether the header should be visible.
/// </summary>
[Category("Layout")]
[Description("Header height in pixels.")]
[DefaultValue(21)]
public int HeaderHeight
{
get
{
return headerHeight;
}
set
{
headerHeight = value;
}
}
public override Color BackColor
{
get
{
if (ViewState["BackColor"] == null)
return ColorTranslator.FromHtml("#FFFFD5");
return (Color)ViewState["BackColor"];
}
set
{
ViewState["BackColor"] = value;
}
}
public override Color BorderColor
{
get
{
if (ViewState["BorderColor"] == null)
return ColorTranslator.FromHtml("#000000");
return (Color)ViewState["BorderColor"];
}
set
{
ViewState["BorderColor"] = value;
}
}
[Category("Appearance")]
[TypeConverter(typeof(WebColorConverter))]
public Color HoverColor
{
get
{
if (ViewState["HoverColor"] == null)
return ColorTranslator.FromHtml("#FFED95");
return (Color)ViewState["HoverColor"];
}
set
{
ViewState["HoverColor"] = value;
}
}
[Category("Appearance")]
[TypeConverter(typeof(WebColorConverter))]
public Color HourBorderColor
{
get
{
if (ViewState["HourBorderColor"] == null)
return ColorTranslator.FromHtml("#EAD098");
return (Color)ViewState["HourBorderColor"];
}
set
{
ViewState["HourBorderColor"] = value;
}
}
[Category("Appearance")]
[TypeConverter(typeof(WebColorConverter))]
public Color HourHalfBorderColor
{
get
{
if (ViewState["HourHalfBorderColor"] == null)
return ColorTranslator.FromHtml("#F3E4B1");
return (Color)ViewState["HourHalfBorderColor"];
}
set
{
ViewState["HourHalfBorderColor"] = value;
}
}
[Category("Appearance")]
[TypeConverter(typeof(WebColorConverter))]
public Color HourNameBorderColor
{
get
{
if (ViewState["HourNameBorderColor"] == null)
return ColorTranslator.FromHtml("#ACA899");
return (Color)ViewState["HourNameBorderColor"];
}
set
{
ViewState["HourNameBorderColor"] = value;
}
}
[Category("Appearance")]
[TypeConverter(typeof(WebColorConverter))]
public Color HourNameBackColor
{
get
{
if (ViewState["HourNameBackColor"] == null)
return ColorTranslator.FromHtml("#ECE9D8");
return (Color)ViewState["HourNameBackColor"];
}
set
{
ViewState["HourNameBackColor"] = value;
}
}
[Category("Appearance")]
[TypeConverter(typeof(WebColorConverter))]
public Color EventBackColor
{
get
{
if (ViewState["EventBackColor"] == null)
return ColorTranslator.FromHtml("#FFFFFF");
return (Color)ViewState["EventBackColor"];
}
set
{
ViewState["EventBackColor"] = value;
}
}
[Category("Appearance")]
[TypeConverter(typeof(WebColorConverter))]
public Color EventHoverColor
{
get
{
if (ViewState["EventHoverColor"] == null)
return ColorTranslator.FromHtml("#DCDCDC");
return (Color)ViewState["EventHoverColor"];
}
set
{
ViewState["EventHoverColor"] = value;
}
}
[Category("Appearance")]
[TypeConverter(typeof(WebColorConverter))]
public Color EventBorderColor
{
get
{
if (ViewState["EventBorderColor"] == null)
return ColorTranslator.FromHtml("#000000");
return (Color)ViewState["EventBorderColor"];
}
set
{
ViewState["EventBorderColor"] = value;
}
}
[Category("Appearance")]
[TypeConverter(typeof(WebColorConverter))]
public Color DurationBarColor
{
get
{
if (ViewState["DurationBarColor"] == null)
return ColorTranslator.FromHtml("blue");
return (Color)ViewState["DurationBarColor"];
}
set
{
ViewState["DurationBarColor"] = value;
}
}
[Category("Appearance")]
[TypeConverter(typeof(WebColorConverter))]
public Color NonBusinessBackColor
{
get
{
if (ViewState["NonBusinessBackColor"] == null)
return ColorTranslator.FromHtml("#FFF4BC");
return (Color)ViewState["NonBusinessBackColor"];
}
set
{
ViewState["NonBusinessBackColor"] = value;
}
}
[Category("Appearance")]
public string EventFontFamily
{
get
{
if (ViewState["EventFontFamily"] == null)
return "Tahoma";
return (string)ViewState["EventFontFamily"];
}
set
{
ViewState["EventFontFamily"] = value;
}
}
[Category("Appearance")]
public string HourFontFamily
{
get
{
if (ViewState["HourFontFamily"] == null)
return "Tahoma";
return (string)ViewState["HourFontFamily"];
}
set
{
ViewState["HourFontFamily"] = value;
}
}
[Category("Appearance")]
public string DayFontFamily
{
get
{
if (ViewState["DayFontFamily"] == null)
return "Tahoma";
return (string)ViewState["DayFontFamily"];
}
set
{
ViewState["DayFontFamily"] = value;
}
}
[Category("Appearance")]
public string EventFontSize
{
get
{
if (ViewState["EventFontSize"] == null)
return "8pt";
return (string)ViewState["EventFontSize"];
}
set
{
ViewState["EventFontSize"] = value;
}
}
[Category("Appearance")]
public string HourFontSize
{
get
{
if (ViewState["HourFontSize"] == null)
return "16pt";
return (string)ViewState["HourFontSize"];
}
set
{
ViewState["HourFontSize"] = value;
}
}
[Category("Appearance")]
public string DayFontSize
{
get
{
if (ViewState["DayFontSize"] == null)
return "10pt";
return (string)ViewState["DayFontSize"];
}
set
{
ViewState["DayFontSize"] = value;
}
}
/// <summary>
/// Determines whether the event tooltip is active.
/// </summary>
[Description("Determines whether the event tooltip is active.")]
[Category("Appearance")]
[DefaultValue(true)]
public bool ShowToolTip
{
get
{
if (ViewState["ShowToolTip"] == null)
return true;
return (bool)ViewState["ShowToolTip"];
}
set
{
ViewState["ShowToolTip"] = value;
}
}
/// <summary>
/// Width of the right margin inside a column (in pixels).
/// </summary>
[Description("Width of the right margin inside a column (in pixels).")]
[Category("Appearance")]
[DefaultValue(5)]
public int ColumnMarginRight
{
get
{
if (ViewState["ColumnMarginRight"] == null)
return 5;
return (int)ViewState["ColumnMarginRight"];
}
set
{
ViewState["ColumnMarginRight"] = value;
}
}
}
}

1437
Web/Ui/DayPilotScheduler.cs Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,44 @@
/*
Copyright <20> 2005 - 2008 Annpoint, s.r.o.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-------------------------------------------------------------------------
NOTE: Reuse requires the following acknowledgement (see also NOTICE):
This product includes DayPilot (http://www.daypilot.org) developed by Annpoint, s.r.o.
*/
using System.Collections;
using System.Web.UI.Design.WebControls;
namespace DayPilot.Web.Ui.Design
{
public class DayPilotCalendarDesigner : DataBoundControlDesigner
{
protected override void PreFilterProperties(IDictionary properties)
{
base.PreFilterProperties(properties);
properties.Remove("Height");
properties.Remove("BorderStyle");
properties.Remove("BorderWidth");
properties.Remove("CssClass");
properties.Remove("Font");
properties.Remove("ForeColor");
properties.Remove("ToolTip");
properties.Remove("EndDate");
}
}
}

View File

@@ -0,0 +1,55 @@
/*
Copyright <20> 2005 - 2008 Annpoint, s.r.o.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-------------------------------------------------------------------------
NOTE: Reuse requires the following acknowledgement (see also NOTICE):
This product includes DayPilot (http://www.daypilot.org) developed by Annpoint, s.r.o.
*/
namespace DayPilot.Web.Ui.Enums
{
/// <summary>
/// Header grouping units.
/// </summary>
public enum GroupByEnum
{
/// <summary>
/// Grouped by hour.
/// </summary>
Hour,
/// <summary>
/// Grouped by day.
/// </summary>
Day,
/// <summary>
/// Grouped by week.
/// </summary>
Week,
/// <summary>
/// Grouped by month.
/// </summary>
Month,
/// <summary>
/// No grouping.
/// </summary>
None
}
}

142
Web/Ui/Event.cs Normal file
View File

@@ -0,0 +1,142 @@
/*
Copyright <20> 2005 - 2008 Annpoint, s.r.o.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-------------------------------------------------------------------------
NOTE: Reuse requires the following acknowledgement (see also NOTICE):
This product includes DayPilot (http://www.daypilot.org) developed by Annpoint, s.r.o.
*/
using System;
namespace DayPilot.Web.Ui
{
/// <summary>
/// Summary description for Event.
/// </summary>
[Serializable]
public class Event
{
/// <summary>
/// Event start.
/// </summary>
public DateTime Start;
/// <summary>
/// Event end;
/// </summary>
public DateTime End;
/// <summary>
/// Event name;
/// </summary>
public string Name;
/// <summary>
/// Event primary key.
/// </summary>
public string PK;
public string Resource;
public string Owner;
/// <summary>
/// Column to which this event belongs.
/// </summary>
[NonSerialized]
public Column Column;
/// <summary>
/// Constructor.
/// </summary>
public Event()
{
}
/// <summary>
/// Constructor that prefills the fields.
/// </summary>
/// <param name="pk"></param>
/// <param name="start"></param>
/// <param name="end"></param>
/// <param name="name"></param>
public Event(string pk, DateTime start, DateTime end, string name) : this(pk, start, end, name, null)
{
}
public Event(string pk, DateTime start, DateTime end, string name, string resource): this(pk, start, end, name, resource, null)
{
}
public Event(string pk, DateTime start, DateTime end, string name, string resource, string owner)
{
this.PK = pk;
this.Start = start;
this.End = end;
this.Name = name;
this.Resource = resource;
this.Owner = owner;
}
/// <summary>
/// Gets the starting time of an event box.
/// </summary>
public DateTime BoxStart
{
get
{
if (Start.Minute >= 30)
return new DateTime(Start.Year, Start.Month, Start.Day, Start.Hour, 30, 0);
else
return new DateTime(Start.Year, Start.Month, Start.Day, Start.Hour, 0, 0);
}
}
/// <summary>
/// Gets the ending time of an event box.
/// </summary>
public DateTime BoxEnd
{
get
{
if (End.Minute > 30)
{
DateTime hourPlus = End.AddHours(1);
return new DateTime(hourPlus.Year, hourPlus.Month, hourPlus.Day, hourPlus.Hour, 0, 0);
}
else if (End.Minute > 0)
{
return new DateTime(End.Year, End.Month, End.Day, End.Hour, 30, 0);
}
else
{
return new DateTime(End.Year, End.Month, End.Day, End.Hour, 0, 0);
}
}
}
/// <summary>
/// Returns true if this box overlaps with e's box.
/// </summary>
/// <param name="e"></param>
/// <returns></returns>
public bool OverlapsWith(Event e)
{
return (this.BoxStart < e.BoxEnd && this.BoxEnd > e.Start);
}
}
}

52
Web/Ui/EventComparer.cs Normal file
View File

@@ -0,0 +1,52 @@
/*
Copyright <20> 2005 - 2008 Annpoint, s.r.o.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-------------------------------------------------------------------------
NOTE: Reuse requires the following acknowledgement (see also NOTICE):
This product includes DayPilot (http://www.daypilot.org) developed by Annpoint, s.r.o.
*/
using System.Collections;
namespace DayPilot.Web.Ui
{
public class EventComparer : IComparer
{
// Calls CaseInsensitiveComparer.Compare with the parameters reversed.
public int Compare(object x, object y)
{
Event first = (Event) x;
Event second = (Event) y;
if (first.Start < second.Start)
{
return -1;
}
if (first.Start > second.Start)
{
return 1;
}
if (first.End > second.End)
return -1;
return 0;
}
}
}

80
Web/Ui/EventDelegates.cs Normal file
View File

@@ -0,0 +1,80 @@
/*
Copyright <20> 2005 - 2008 Annpoint, s.r.o.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-------------------------------------------------------------------------
NOTE: Reuse requires the following acknowledgement (see also NOTICE):
This product includes DayPilot (http://www.daypilot.org) developed by Annpoint, s.r.o.
*/
using System;
namespace DayPilot.Web.Ui
{
/// <summary>
/// Delegate for passing an event primary key.
/// </summary>
public delegate void EventClickDelegate(object sender, EventClickEventArgs e);
/// <summary>
/// Delegate for passing a starting time.
/// </summary>
public delegate void FreeClickDelegate(object sender, FreeClickEventArgs e);
public class EventClickEventArgs : EventArgs
{
private string value;
public string Value
{
get { return value; }
}
public EventClickEventArgs(string value)
{
this.value = value;
}
}
public class FreeClickEventArgs : EventArgs
{
private DateTime start;
private string resource;
public DateTime Start
{
get { return start; }
}
public string Resource
{
get { return resource; }
}
public FreeClickEventArgs(DateTime start)
{
this.start = start;
}
public FreeClickEventArgs(DateTime start, string resource)
{
this.start = start;
this.resource = resource;
}
}
}

View File

@@ -0,0 +1,45 @@
/*
Copyright <20> 2005 - 2008 Annpoint, s.r.o.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-------------------------------------------------------------------------
NOTE: Reuse requires the following acknowledgement (see also NOTICE):
This product includes DayPilot (http://www.daypilot.org) developed by Annpoint, s.r.o.
*/
namespace DayPilot.Web.Ui
{
/// <summary>
/// Behavior of the non-business hours.
/// </summary>
public enum NonBusinessHoursBehavior
{
/// <summary>
/// Hides the non-business hours if there is no event in that time.
/// </summary>
HideIfPossible,
/// <summary>
/// Always hides the non-business hours.
/// </summary>
Hide,
/// <summary>
/// Always shows the non-business hours.
/// </summary>
Show
}
}

87
Web/Ui/Resource.cs Normal file
View File

@@ -0,0 +1,87 @@
/*
Copyright <20> 2005 - 2008 Annpoint, s.r.o.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-------------------------------------------------------------------------
NOTE: Reuse requires the following acknowledgement (see also NOTICE):
This product includes DayPilot (http://www.daypilot.org) developed by Annpoint, s.r.o.
*/
using System;
namespace DayPilot.Web.Ui
{
/// <summary>
/// Class representing a resource <see cref="DayPilotScheduler">DayPilotScheduler</see>.
/// </summary>
[Serializable]
public class Resource
{
private string val;
private string name;
/// <summary>
/// Default constructor.
/// </summary>
public Resource()
{
}
/// <summary>
/// Constructor that sets the default values.
/// </summary>
/// <param name="name">Row name (visible).</param>
/// <param name="val">Row value (id).</param>
public Resource(string name, string val)
{
this.name = name;
this.val = val;
}
/// <summary>
/// Row value (id).
/// </summary>
public string Value
{
get { return val; }
set { val = value; }
}
/// <summary>
/// Get or set the row name (<see cref="Resource.Name">Row.Name</see>).
/// </summary>
public string Name
{
get { return name; }
set { name = value; }
}
///<summary>
///Returns a <see cref="T:System.String"></see> that represents the current <see cref="T:System.Object"></see>.
///</summary>
///
///<returns>
///A <see cref="T:System.String"></see> that represents the current <see cref="T:System.Object"></see>.
///</returns>
///<filterpriority>2</filterpriority>
public override string ToString()
{
return Name;
}
}
}

View File

@@ -0,0 +1,155 @@
/*
Copyright <20> 2005 - 2008 Annpoint, s.r.o.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-------------------------------------------------------------------------
NOTE: Reuse requires the following acknowledgement (see also NOTICE):
This product includes DayPilot (http://www.daypilot.org) developed by Annpoint, s.r.o.
*/
using System.Collections;
using System.ComponentModel;
using DayPilot.Web.Ui.Serialization;
namespace DayPilot.Web.Ui
{
/// <summary>
/// Collection of resources definitions.
/// </summary>
[TypeConverter(typeof(ResourceCollectionConverter))]
public class ResourceCollection : CollectionBase
{
internal bool designMode;
/// <summary>
/// Gets the specified <see cref="Resource">Resource</see>.
/// </summary>
/// <param name="index">Item index</param>
/// <returns>Resource at the specified position.</returns>
public Resource this[int index]
{
get
{
return ((Resource)List[index]);
}
set
{
List[index] = value;
}
}
/// <summary>
/// Converts ResourceCollection to ArrayList.
/// </summary>
/// <returns>ArrayList with ResourceCollection items.</returns>
public ArrayList ToArrayList()
{
ArrayList retArray = new ArrayList();
for (int i = 0; i < this.Count; i++)
{
retArray.Add(this[i]);
}
return retArray;
}
/// <summary>
/// Adds a new <see cref="Resource">Resource</see> to the collection.
/// </summary>
/// <param name="value">Resource to be added.</param>
/// <returns></returns>
public int Add(Resource value)
{
return (List.Add(value));
}
/// <summary>
/// Adds a new <see cref="Resource">Resource</see> to the collection.
/// </summary>
/// <param name="name">Resource name</param>
/// <param name="id">Resource id</param>
/// <returns></returns>
public int Add(string name, string id)
{
return Add(new Resource(name, id));
}
/// <summary>
/// Determines the index of a specific item in the collection.
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public int IndexOf(Resource value)
{
return (List.IndexOf(value));
}
/// <summary>
/// Inserts a new resource at the specified position.
/// </summary>
/// <param name="index">New resource position.</param>
/// <param name="value">Resource to be added.</param>
public void Insert(int index, Resource value)
{
List.Insert(index, value);
}
/// <summary>
/// Removes a Resource from the collection.
/// </summary>
/// <param name="value">Resource to be removed.</param>
public void Remove(Resource value)
{
List.Remove(value);
}
/// <summary>
/// Determines whether the collection contains a specified resource.
/// </summary>
/// <param name="value">Resource to be found.</param>
/// <returns>True if the collection contains the resource</returns>
public bool Contains(Resource value)
{
return (List.Contains(value));
}
/// <summary>
/// Creates a new collection from an ArrayList.
/// </summary>
/// <param name="items">ArrayList that contains the new resources.</param>
public ResourceCollection(ArrayList items)
: base()
{
for (int i = 0; i < items.Count; i++)
{
if (items[i] is Resource)
{
this.Add((Resource)items[i]);
}
}
}
/// <summary>
/// Creates a new ResourceCollection.
/// </summary>
public ResourceCollection()
: base()
{ }
}
}

View File

@@ -0,0 +1,136 @@
/*
Copyright <20> 2005 - 2008 Annpoint, s.r.o.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-------------------------------------------------------------------------
NOTE: Reuse requires the following acknowledgement (see also NOTICE):
This product includes DayPilot (http://www.daypilot.org) developed by Annpoint, s.r.o.
*/
using System;
using System.Collections;
using System.ComponentModel;
using Encoder=DayPilot.Utils.Encoder;
namespace DayPilot.Web.Ui.Serialization
{
/// <summary>
/// Internal class for serializing ResourceCollection (ViewState).
/// </summary>
public class ResourceCollectionConverter : TypeConverter
{
/// <summary>
///
/// </summary>
/// <param name="context"></param>
/// <param name="sourceType"></param>
/// <returns></returns>
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
if (sourceType == typeof(String))
return true;
return base.CanConvertFrom(context, sourceType);
}
/// <summary>
///
/// </summary>
/// <param name="context"></param>
/// <param name="destinationType"></param>
/// <returns></returns>
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
{
if (destinationType == typeof(String))
return true;
return base.CanConvertTo(context, destinationType);
}
/// <summary>
///
/// </summary>
/// <param name="context"></param>
/// <param name="culture"></param>
/// <param name="value"></param>
/// <returns></returns>
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
String state = value as String;
if (state == null)
{
return base.ConvertFrom(context, culture, value);
}
if (state == String.Empty)
{
return new ResourceCollection();
}
String[] parts = state.Split('&');
ResourceCollection collection = new ResourceCollection();
foreach (string encRes in parts)
{
string[] props = Encoder.UrlDecode(encRes).Split('&');
Resource r = new Resource();
r.Name = Encoder.UrlDecode(props[0]);
r.Value = Encoder.UrlDecode(props[1]);
collection.Add(r);
}
return collection;
}
/// <summary>
///
/// </summary>
/// <param name="context"></param>
/// <param name="culture"></param>
/// <param name="value"></param>
/// <param name="destinationType"></param>
/// <returns></returns>
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
{
if (destinationType == null)
throw new ArgumentException("destinationType");
ResourceCollection collection = value as ResourceCollection;
if (collection == null)
{
return base.ConvertTo(context, culture, value, destinationType);
}
if (collection.designMode)
{
return "(Collection)";
}
ArrayList al = new ArrayList();
foreach (Resource r in collection)
{
ArrayList properties = new ArrayList();
properties.Add(r.Name);
properties.Add(r.Value);
al.Add(Encoder.UrlEncode(properties));
}
return Encoder.UrlEncode(al);
}
}
}

39
Web/Ui/TimeFormat.cs Normal file
View File

@@ -0,0 +1,39 @@
/*
Copyright <20> 2005 - 2008 Annpoint, s.r.o.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-------------------------------------------------------------------------
NOTE: Reuse requires the following acknowledgement (see also NOTICE):
This product includes DayPilot (http://www.daypilot.org) developed by Annpoint, s.r.o.
*/
namespace DayPilot.Web.Ui
{
/// <summary>
/// Options for the time format.
/// </summary>
public enum TimeFormat
{
/// <summary>
/// 12-hours time format (e.g. 2 p.m.)
/// </summary>
Clock12Hours,
/// <summary>
/// 24-hours time format (e.g. 14:00)
/// </summary>
Clock24Hours
}
}

View File

@@ -0,0 +1,40 @@
/*
Copyright <20> 2005 - 2008 Annpoint, s.r.o.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-------------------------------------------------------------------------
NOTE: Reuse requires the following acknowledgement (see also NOTICE):
This product includes DayPilot (http://www.daypilot.org) developed by Annpoint, s.r.o.
*/
namespace DayPilot.Web.Ui
{
/// <summary>
/// Summary description for UserActionHandling.
/// </summary>
public enum UserActionHandling
{
/// <summary>
/// It should run a JavaScript action.
/// </summary>
JavaScript,
/// <summary>
/// It should call a PostBack.
/// </summary>
PostBack
}
}