private void RenderEvent(HtmlTextWriter output, Event e, Day d) { string displayText = e.Name + " (" + e.Start.ToShortTimeString() + " - " + e.End.ToShortTimeString() + ")"; BeforeEventRenderEventArgs ea = new BeforeEventRenderEventArgs(e); ea.InnerHTML = displayText; ea.ToolTip = displayText; ea.EventClickEnabled = EventClickHandling != EventClickHandlingEnum.Disabled; if (!CssOnly) { ea.DurationBarColor = ColorTranslator.ToHtml(DurationBarColor); ea.BackgroundColor = ColorTranslator.ToHtml(EventBackColor); } DoBeforeEventRender(ea); // 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 Exception("Unexpected time for dayVisibleEnd."); } DateTime realBoxEnd = e.BoxEnd > dayVisibleEnd ? dayVisibleEnd : e.BoxEnd; // top double top = (realBoxStart - dayVisibleStart).TotalHours * (CellHeight * 2) + 1; if (ShowHeader) { top += HeaderHeight; } // height double height = (realBoxEnd - realBoxStart).TotalHours * (CellHeight * 2) - 2; int startDelta = (int)Math.Floor((e.Start - realBoxStart).TotalHours * (CellHeight * 2)); int endDelta = (int)Math.Floor((realBoxEnd - e.End).TotalHours * (CellHeight * 2)); double barHeight = height - startDelta - endDelta; int barTop = startDelta; // It's outside of visible area (for NonBusinessHours set to Hide). // Don't draw it in that case. if (height <= 0) { return; } if (CssOnly) { output.AddStyleAttribute("-moz-user-select", "none"); // prevent text selection in FF output.AddStyleAttribute("-khtml-user-select", "none"); // prevent text selection output.AddStyleAttribute("-webkit-user-select", "none"); // prevent text selection output.AddStyleAttribute("user-select", "none"); // prevent text selection output.AddAttribute("unselectable", "on"); output.AddStyleAttribute("position", "absolute"); output.AddStyleAttribute("left", e.Column.StartsAtPct + "%"); output.AddStyleAttribute("top", top + "px"); output.AddStyleAttribute("width", e.Column.WidthPct + "%"); output.AddStyleAttribute("height", (realBoxEnd - realBoxStart).TotalHours * (CellHeight * 2) + "px"); output.AddAttribute("class", PrefixCssClass("_event")); if (ea.EventClickEnabled && EventClickHandling != EventClickHandlingEnum.Disabled) { if (EventClickHandling == EventClickHandlingEnum.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.AddAttribute("onmouseover", "this.className+=' " + PrefixCssClass("_event_hover") + "';event.cancelBubble=true;"); output.AddAttribute("onmouseout", "if (this.className) { this.className = this.className.replace(' " + PrefixCssClass("_event_hover") + "', ''); } ;event.cancelBubble=true;"); output.RenderBeginTag("div"); // inner output.AddAttribute("class", PrefixCssClass("_event_inner")); output.AddAttribute("unselectable", "on"); output.RenderBeginTag("div"); output.Write(ea.InnerHTML); output.RenderEndTag(); // bar output.AddAttribute("class", PrefixCssClass("_event_bar")); output.AddStyleAttribute("position", "absolute"); output.RenderBeginTag("div"); double barTopPct = (100.0*barTop/height); double barHeightPct = (100.0*barHeight/height); if (barTopPct + barHeightPct > 100) { barHeightPct = 100 - barTopPct; } // bar_inner output.AddAttribute("class", PrefixCssClass("_event_bar_inner")); output.AddStyleAttribute("top", barTopPct + "%"); output.AddStyleAttribute("height", barHeightPct + "%"); output.RenderBeginTag("div"); // bar_inner output.RenderEndTag(); // bar output.RenderEndTag(); output.RenderEndTag(); } else { // MAIN BOX output.AddAttribute("onselectstart", "return false;"); // prevent text selection in IE if (ea.EventClickEnabled && EventClickHandling != EventClickHandlingEnum.Disabled) { if (EventClickHandling == EventClickHandlingEnum.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("cursor", "pointer"); } 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("position", "absolute"); if (!CssOnly) { output.AddStyleAttribute("font-family", EventFontFamily); output.AddStyleAttribute("font-size", EventFontSize); output.AddStyleAttribute("white-space", "no-wrap"); output.AddStyleAttribute("background-color", ColorTranslator.ToHtml(EventBorderColor)); } output.AddStyleAttribute("left", e.Column.StartsAtPct + "%"); output.AddStyleAttribute("top", top + "px"); output.AddStyleAttribute("width", e.Column.WidthPct + "%"); output.AddStyleAttribute("height", (realBoxEnd - realBoxStart).TotalHours * (CellHeight * 2) + "px"); output.RenderBeginTag("div"); // FIX BOX - to fix the outer/inner box differences in Mozilla/IE (to create border) if (ea.EventClickEnabled && EventClickHandling != EventClickHandlingEnum.Disabled) { if (!CssOnly) { output.AddAttribute("onmouseover", "this.style.backgroundColor='" + ColorTranslator.ToHtml(EventHoverColor) + "';event.cancelBubble=true;"); output.AddAttribute("onmouseout", "this.style.backgroundColor='" + ea.BackgroundColor + "';event.cancelBubble=true;"); } } if (ShowToolTip) { output.AddAttribute("title", ea.ToolTip); } output.AddStyleAttribute("margin-top", "1px"); output.AddStyleAttribute("display", "block"); output.AddStyleAttribute("height", height + "px"); if (!CssOnly) { output.AddStyleAttribute("background-color", ea.BackgroundColor); 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"); // blue column if (e.Start > realBoxStart) { } output.AddStyleAttribute("float", "left"); output.AddStyleAttribute("width", "5px"); output.AddStyleAttribute("height", height - startDelta - endDelta + "px"); output.AddStyleAttribute("margin-top", startDelta + "px"); if (!CssOnly) { output.AddStyleAttribute("background-color", ea.DurationBarColor); output.AddStyleAttribute("font-size", "1px"); } output.RenderBeginTag("div"); output.RenderEndTag(); // right border of blue column output.AddStyleAttribute("float", "left"); output.AddStyleAttribute("width", "1px"); if (!CssOnly) { output.AddStyleAttribute("background-color", ColorTranslator.ToHtml(EventBorderColor)); } output.AddStyleAttribute("height", "100%"); output.RenderBeginTag("div"); output.RenderEndTag(); // space output.AddStyleAttribute("float", "left"); output.AddStyleAttribute("width", "2px"); output.AddStyleAttribute("height", "100%"); output.RenderBeginTag("div"); output.RenderEndTag(); // PADDING BOX output.AddStyleAttribute("padding", "1px"); output.RenderBeginTag("div"); output.Write(ea.InnerHTML); // closing the PADDING BOX output.RenderEndTag(); // closing the FIX BOX output.RenderEndTag(); // closing the MAIN BOX output.RenderEndTag(); } }
private void stripAndAddEvent(Event e) { stripAndAddEvent(e.Start, e.End, e.PK, e.Name, e.Resource, e.Source); }
/// <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); }
protected override void PerformDataBinding(IEnumerable retrievedData) { // don't load events in design mode if (DesignMode) { return; } base.PerformDataBinding(retrievedData); if (String.IsNullOrEmpty(DataStartField)) throw new NullReferenceException("DataStartField property must be specified."); if (String.IsNullOrEmpty(DataEndField)) throw new NullReferenceException("DataEndField property must be specified."); if (String.IsNullOrEmpty(DataTextField)) throw new NullReferenceException("DataTextField property must be specified."); if (String.IsNullOrEmpty(DataValueField)) throw new NullReferenceException("DataValueField property must be specified."); // Verify data exists. // ReSharper disable ConditionIsAlwaysTrueOrFalse if (retrievedData != null) // ReSharper restore ConditionIsAlwaysTrueOrFalse { _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)); var ev = new Event(pk, start, end, name); ev.Source = dataItem; _items.Add(ev); } _items.Sort(new EventComparer()); } }
internal bool OverlapsWith(Event e) { if (events.Count == 0) return false; return (this.BoxStart < e.BoxEnd && this.BoxEnd > e.BoxStart); }
internal void Add(Event ev) { events.Add(ev); arrangeColumns(); }
private void RenderEvent(Day d, Event p, HtmlTextWriter output) { BeforeEventRenderEventArgs ea = new BeforeEventRenderEventArgs(p); ea.InnerHTML = p.Name; ea.ToolTip = p.Name; ea.EventClickEnabled = EventClickHandling != EventClickHandlingEnum.Disabled; if (!CssOnly) { ea.DurationBarColor = ColorTranslator.ToHtml(DurationBarColor); ea.BackgroundColor = ColorTranslator.ToHtml(EventBackColor); } DoBeforeEventRender(ea); int max = CellCount*CellWidth; int left = (int)Math.Floor((p.BoxStart - d.Start).TotalMinutes * CellWidth / CellDuration); int top = p.Column.Number * EventHeight - 1; int width = (int)Math.Floor((p.BoxEnd - p.BoxStart).TotalMinutes * CellWidth / CellDuration) - 2; int height = EventHeight - 1; int startDelta = (int)Math.Floor((p.Start - p.BoxStart).TotalMinutes * CellWidth / CellDuration - 1); int realWidth = (int)Math.Floor((p.End - p.Start).TotalMinutes * CellWidth / CellDuration); realWidth = realWidth == 0 ? 1 : realWidth; // adjustments if (left > max) // don't render { return; } if (left + width > max - 2) { width = max - left - 2; } if (left < 0) { width += left; left = 0; } width = Math.Max(width, 2); if (!CssOnly) { output.AddAttribute("unselectable", "on"); output.AddStyleAttribute("position", "absolute"); output.AddStyleAttribute("left", left + "px"); output.AddStyleAttribute("top", top + "px"); output.AddStyleAttribute("width", width + "px"); output.AddStyleAttribute("height", height + "px"); output.AddStyleAttribute("overflow", "hidden"); output.AddStyleAttribute("border", "1px solid " + ColorTranslator.ToHtml(EventBorderColor)); output.AddStyleAttribute("background-color", ea.BackgroundColor); output.AddStyleAttribute("white-space", "nowrap"); output.AddStyleAttribute("font-family", EventFontFamily); output.AddStyleAttribute("font-size", EventFontSize); if (ea.EventClickEnabled && EventClickHandling != EventClickHandlingEnum.Disabled) { if (EventClickHandling == EventClickHandlingEnum.PostBack) { output.AddAttribute("onclick", "javascript:event.cancelBubble=true;" + Page.ClientScript.GetPostBackEventReference(this, "PK:" + p.PK)); } else { output.AddAttribute("onclick", "javascript:event.cancelBubble=true;" + String.Format(EventClickJavaScript, p.PK)); } output.AddStyleAttribute("cursor", "pointer"); } else { output.AddStyleAttribute("cursor", "default"); } output.RenderBeginTag("div"); if (DurationBarVisible) { output.Write("<div unselectable='on' style='width:" + realWidth + "px; margin-left: " + startDelta + "px; height:2px; background-color:" + ea.DurationBarColor + "; font-size:1px; position:relative;' ></div>"); output.Write("<div unselectable='on' style='width:" + width + "px; height:1px; background-color:" + ColorTranslator.ToHtml(EventBorderColor) + "; font-size:1px; position:relative;' ></div>"); } output.AddStyleAttribute("display", "block"); output.AddStyleAttribute("padding-left", "1px"); output.AddAttribute("unselectable", "on"); output.RenderBeginTag("div"); output.Write(ea.InnerHTML); output.RenderEndTag(); output.RenderEndTag(); } else { output.AddAttribute("unselectable", "on"); output.AddStyleAttribute("position", "absolute"); output.AddStyleAttribute("left", left + "px"); output.AddStyleAttribute("top", top + "px"); output.AddStyleAttribute("width", width + "px"); output.AddStyleAttribute("height", height + "px"); output.AddStyleAttribute("overflow", "hidden"); output.AddAttribute("class", PrefixCssClass("_event")); if (ea.EventClickEnabled && EventClickHandling != EventClickHandlingEnum.Disabled) { if (EventClickHandling == EventClickHandlingEnum.PostBack) { output.AddAttribute("onclick", "javascript:event.cancelBubble=true;" + Page.ClientScript.GetPostBackEventReference(this, "PK:" + p.PK)); } else { output.AddAttribute("onclick", "javascript:event.cancelBubble=true;" + String.Format(EventClickJavaScript, p.PK)); } output.AddStyleAttribute("cursor", "pointer"); } else { output.AddStyleAttribute("cursor", "default"); } output.RenderBeginTag("div"); output.AddStyleAttribute("display", "block"); output.AddAttribute("unselectable", "on"); output.AddAttribute("class", PrefixCssClass("_event_inner")); if (!String.IsNullOrEmpty(ea.BackgroundColor)) { output.AddStyleAttribute("background", ea.BackgroundColor); } output.RenderBeginTag("div"); output.Write(ea.InnerHTML); output.RenderEndTag(); if (DurationBarVisible) { output.AddStyleAttribute("position", "absolute"); output.AddAttribute("unselectable", "on"); output.AddAttribute("class", PrefixCssClass("_event_bar")); output.RenderBeginTag("div"); double barLeft = 100.0 * startDelta / width; double barWidth = 100.0 * realWidth / width; output.AddAttribute("class", PrefixCssClass("_event_bar_inner")); output.AddStyleAttribute("left", barLeft + "%"); output.AddStyleAttribute("width", barWidth + "%"); if (!String.IsNullOrEmpty(ea.DurationBarColor)) { output.AddStyleAttribute("background", ea.DurationBarColor); } output.RenderBeginTag("div"); output.RenderEndTag(); output.RenderEndTag(); //output.Write("<div unselectable='on' style='width:" + realWidth + "px; margin-left: " + startDelta + "px; height:2px; background-color:" + ea.DurationBarColor + "; font-size:1px; position:relative;' ></div>"); //output.Write("<div unselectable='on' style='width:" + width + "px; height:1px; background-color:" + ColorTranslator.ToHtml(EventBorderColor) + "; font-size:1px; position:relative;' ></div>"); } output.RenderEndTag(); } }
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; }