public override void OnDrawItemText(CalendarRendererBoxEventArgs e) { CalendarItem item = e.Tag as CalendarItem; if (item != null) { if (item.IsDragging) { e.TextColor = Colors.FromArgb(120, e.TextColor); } } base.OnDrawItemText(e); }
/// <summary> /// Creates a new item on the current selection. /// If there's no selection, this will be ignored. /// </summary> /// <param name="itemText">Text of the item</param> /// <param name="editMode">If <c>true</c> activates the edit mode so user can edit the text of the item.</param> public void CreateItemOnSelection(string itemText, bool editMode) { if (SelectedElementEnd == null || SelectedElementStart == null) { return; } CalendarTimeScaleUnit unitEnd = SelectedElementEnd as CalendarTimeScaleUnit; CalendarDayTop dayTop = SelectedElementEnd as CalendarDayTop; CalendarDay day = SelectedElementEnd as CalendarDay; TimeSpan duration = unitEnd != null ? unitEnd.Duration : new TimeSpan(23, 59, 59); CalendarItem item = new CalendarItem(this); DateTime dstart = SelectedElementStart.Date; DateTime dend = SelectedElementEnd.Date; if (dend.CompareTo(dstart) < 0) { DateTime dtmp = dend; dend = dstart; dstart = dtmp; } item.StartDate = dstart; item.EndDate = dend.Add(duration); item.Text = itemText; CalendarItemCancelEventArgs evtA = new CalendarItemCancelEventArgs(item); OnItemCreating(evtA); if (!evtA.Cancel) { Items.Add(item); if (editMode) { _creatingItem = true; ActivateEditMode(item); } } }
/// <summary> /// Returns a value indicating if the view range intersect the date range of the specified item /// </summary> /// <param name="item"></param> public bool ViewIntersects(CalendarItem item) { return(ViewIntersects(item.StartDate, item.EndDate)); }
protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); ICalendarSelectableElement hitted = HitTest(e.GetPosition(this), State != CalendarState.Idle); CalendarItem hittedItem = hitted as CalendarItem; CalendarDayTop hittedTop = hitted as CalendarDayTop; bool shiftPressed = Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift); if (hitted != null) { switch (State) { case CalendarState.Idle: Cursor should = Cursors.Arrow; if (hittedItem != null) { if ((hittedItem.ResizeEndDateZone(e.GetPosition(this)) || hittedItem.ResizeStartDateZone(e.GetPosition(this))) && AllowItemResize) { should = hittedItem.IsOnDayTop || DaysMode == CalendarDaysMode.Short ? Cursors.SizeWE : Cursors.SizeNS; } OnItemMouseHover(new CalendarItemEventArgs(hittedItem)); } if (!Cursor.Equals(should)) { Cursor = should; } break; case CalendarState.DraggingTimeSelection: if (SelectedElementStart != null && !SelectedElementEnd.Equals(hitted)) { SelectedElementEnd = hitted; } break; case CalendarState.DraggingItem: TimeSpan duration = itemOnState.Duration; itemOnState.SetIsDragging(true); itemOnState.StartDate = hitted.Date; itemOnState.EndDate = itemOnState.StartDate.Add(duration); Renderer.PerformItemsLayout(); Invalidate(); itemOnStateChanged = true; break; case CalendarState.ResizingItem: if (itemOnState.IsResizingEndDate && hitted.Date.CompareTo(itemOnState.StartDate) >= 0) { itemOnState.EndDate = hitted.Date.Add(hittedTop != null || DaysMode == CalendarDaysMode.Short ? new TimeSpan(23, 59, 59) : Days[0].TimeUnits[0].Duration); } else if (itemOnState.IsResizingStartDate && hitted.Date.CompareTo(itemOnState.EndDate) <= 0) { itemOnState.StartDate = hitted.Date; } Renderer.PerformItemsLayout(); Invalidate(); itemOnStateChanged = true; break; case CalendarState.EditingItemText: break; } } }
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) { base.OnMouseLeftButtonDown(e); ICalendarSelectableElement hitted = HitTest(e.GetPosition(this)); CalendarItem hittedItem = hitted as CalendarItem; bool shiftPressed = Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift); if (!Focused) { Focus(); } switch (State) { case CalendarState.Idle: if (hittedItem != null) { if (!shiftPressed) { ClearSelectedItems(); } hittedItem.SetSelected(true); Invalidate(hittedItem); OnItemSelected(new CalendarItemEventArgs(hittedItem)); itemOnState = hittedItem; itemOnStateChanged = false; if (AllowItemEdit) { if (itemOnState.ResizeStartDateZone(e.GetPosition(this)) && AllowItemResize) { SetState(CalendarState.ResizingItem); itemOnState.SetIsResizingStartDate(true); } else if (itemOnState.ResizeEndDateZone(e.GetPosition(this)) && AllowItemResize) { SetState(CalendarState.ResizingItem); itemOnState.SetIsResizingEndDate(true); } else { SetState(CalendarState.DraggingItem); } } SetSelectionRange(null, null); } else { ClearSelectedItems(); if (shiftPressed) { if (hitted != null && SelectedElementEnd == null && !SelectedElementEnd.Equals(hitted)) { SelectedElementEnd = hitted; } } else { if (SelectedElementStart == null || (hitted != null && !SelectedElementStart.Equals(hitted))) { SetSelectionRange(hitted, hitted); } } SetState(CalendarState.DraggingTimeSelection); } break; case CalendarState.DraggingTimeSelection: break; case CalendarState.DraggingItem: break; case CalendarState.ResizingItem: break; case CalendarState.EditingItemText: break; } }
public CalendarRendererItemEventArgs(CalendarRendererEventArgs original, CalendarItem item) : base(original) { _item = item; }
/// <summary> /// Creates a new <see cref="CalendarItemEventArgs"/> /// </summary> /// <param name="item">Related Item</param> public CalendarItemEventArgs(CalendarItem item) { _item = item; }
/// <summary> /// Creates a new <see cref="CalendarItemEventArgs"/> /// </summary> /// <param name="item">Related Item</param> public CalendarItemCancelEventArgs(CalendarItem item) { _item = item; }