public void InsertItem(DayDetail item, int index) { ModifyItem(item); itemsGrid.Children.Insert(index, item); UpdateColumnSpans(); }
/// <summary> /// Remove all items. /// </summary> public void Clear() { int count = stackPanel.Children.Count; for (int i = 0; i < count; i++) { DayDetail detail = (DayDetail)stackPanel.Children[i]; RemoveHandlers(detail); detail.CloseToolTip(); } stackPanel.Children.Clear(); count = clockGrid.Items.Count; for (int i = 0; i < count; i++) { DayDetail detail = (DayDetail)clockGrid.Items[i]; RemoveHandlers(detail); detail.CloseToolTip(); } clockGrid.ClearItems(); _activeDetail = null; }
public void AddItem(DayDetail item) { ModifyItem(item); itemsGrid.Children.Add(item); UpdateColumnSpans(); }
public void UpdateActiveDetail() { if (_activeDetail != null) { _activeDetail.InitializeDisplay(); if (_activeDetail.Appointment.AllDay && _activeDetail.Parent != stackPanel) { clockGrid.Items.Remove(_activeDetail); _activeDetail.Margin = new Thickness(0, 1, 10, 0); stackPanel.Children.Insert(0, _activeDetail); } else if (!_activeDetail.Appointment.AllDay && _activeDetail.Parent == stackPanel) { stackPanel.Children.Remove(_activeDetail); clockGrid.InsertItem(_activeDetail, 0); clockGrid.Layout(); } else if (_activeDetail.Parent != stackPanel) { clockGrid.Layout(); } _activeDetail = null; } }
private void detail_OnBeginEditEvent(object sender, EventArgs e) { DayDetail _sender = (DayDetail)sender; _activeDetail = _sender; IsChecked = true; BeginEditEvent(EventArgs.Empty); }
public void RemoveHandlers(DayDetail detail) { detail.OnBeginEditEvent -= detail_OnBeginEditEvent; detail.OnDeleteStartEvent -= detail_OnDeleteStartEvent; detail.OnDeleteEndEvent -= detail_OnDeleteEndEvent; detail.OnExportEvent -= detail_OnExportEvent; detail.Navigate -= detail_Navigate; detail.ShowAsChanged -= detail_ShowAsChanged; }
public void AddHandlers(DayDetail detail) { detail.OnBeginEditEvent += detail_OnBeginEditEvent; detail.OnDeleteStartEvent += detail_OnDeleteStartEvent; detail.OnDeleteEndEvent += detail_OnDeleteEndEvent; detail.OnExportEvent += detail_OnExportEvent; detail.Navigate += detail_Navigate; detail.ShowAsChanged += detail_ShowAsChanged; }
private void DayNoon_Selected(object sender, EventArgs e) { DayDawn.BackgroundColor = _unselected; DayMorning.BackgroundColor = _unselected; DayNoon.BackgroundColor = _selected; DayAfternoon.BackgroundColor = _unselected; DayEvening.BackgroundColor = _unselected; _dayDetail = DayDetail.Noon; }
public void Layout() { DayDetail[] existing = new DayDetail[itemsGrid.Children.Count]; itemsGrid.Children.CopyTo(existing, 0); ClearItems(); foreach (DayDetail each in existing) { AddItem(each); } }
/// <summary> /// Create a new appointment on the active date with the specified subject /// </summary> public void NewAppointment(string subject) { if (_activeDetail != null) { EndEdit(false); } Appointment appointment = new Appointment(); if (IsChecked == true || _checked == null) { appointment.StartDate = Date; appointment.EndDate = Date.AddDays(1); appointment.AllDay = true; } else { // Calculate the selected time Grid parent = (Grid)_checked.Parent; int rowCount = parent.RowDefinitions.Count; int row = Grid.GetRow(_checked); DateTime startTime = Date.AddMinutes(row * 24 * 60 / rowCount); DateTime endTime = startTime.AddMinutes(1 * 24 * 60 / rowCount); appointment.StartDate = startTime; appointment.EndDate = endTime; appointment.AllDay = false; appointment.ShowAs = ShowAs.Busy; appointment.Reminder = Settings.DefaultReminder; } appointment.Subject = subject; DayDetail detail = new DayDetail(appointment); AddHandlers(detail); if (IsChecked == true) { stackPanel.Children.Insert(0, detail); } else { clockGrid.AddItem(detail); } detail.BeginEdit(); }
private void detail_OnDeleteEndEvent(object sender, EventArgs e) { DayDetail _sender = (DayDetail)sender; RemoveHandlers(_sender); _activeDetail = null; if (_sender.Parent == stackPanel) { allDayGrid.MinHeight = 35; stackPanel.Children.Remove(_sender); } else if (_sender.Parent == clockGrid.ItemsGrid) { clockGrid.Items.Remove(_sender); clockGrid.Layout(); } }
private void additems(Appointment[] appts) { foreach (Appointment each in appts) { DayDetail detail = new DayDetail(each); AddHandlers(detail); if (each.AllDay) { stackPanel.Children.Add(detail); } else { clockGrid.AddItem(detail); } } if (_openOnLoad != null) { BeginEditing(_openOnLoad, true); _openOnLoad = null; } }
//private void ModifyItem(DayDetail item) //{ // item.HorizontalAlignment = HorizontalAlignment.Stretch; // item.VerticalAlignment = VerticalAlignment.Top; // int startH; // int startM; // if (item.Appointment.StartDate.Date == RepresentingDate) // { // startH = item.Appointment.StartDate.TimeOfDay.Hours; // startM = item.Appointment.StartDate.TimeOfDay.Minutes; // } // else // startH = startM = 0; // int endH; // int endM; // if (item.Appointment.EndDate.Date == RepresentingDate) // { // endH = item.Appointment.EndDate.TimeOfDay.Hours; // endM = item.Appointment.EndDate.TimeOfDay.Minutes; // } // else // { // endH = 24; // endM = 0; // } // double hourHeight = itemsGrid.Height / 24; // double marginTop = startH * hourHeight + startM * hourHeight / 60; // if (marginTop > itemsGrid.Height - DayDetail.CollapsedHeight) // marginTop = itemsGrid.Height - DayDetail.CollapsedHeight; // item.Margin = new Thickness(0, marginTop, 10, 0); // double height = endH * hourHeight + endM * hourHeight / 60 - marginTop; // height = height > DayDetail.CollapsedHeight ? height : DayDetail.CollapsedHeight; // item.Height = height; // int proposedColumn = 1; // foreach (DayDetail detail in itemsGrid.Children) // { // double dTop = detail.Margin.Top; // double dHeight = detail.Height; // if ((marginTop >= dTop && marginTop <= dTop + dHeight) // || (marginTop <= dTop && marginTop + height >= dTop) // || marginTop == dTop) // { // int dCol = Grid.GetColumn(detail); // if (dCol >= proposedColumn) // proposedColumn = dCol + 1; // } // } // if (itemsGrid.ColumnDefinitions.Count - 1 < proposedColumn) // { // ColumnDefinition def = new ColumnDefinition(); // def.Width = new GridLength(1, GridUnitType.Star); // itemsGrid.ColumnDefinitions.Add(def); // } // Grid.SetColumn(item, proposedColumn); // Grid.SetColumnSpan(item, 1); //} private void ModifyItem(DayDetail item) { item.Zoom = Zoom; item.ParentLayout = Layout; item.HorizontalAlignment = HorizontalAlignment.Stretch; item.VerticalAlignment = VerticalAlignment.Top; int startH; int startM; DateTime start; DateTime end; if (!item.Appointment.IsRepeating) { start = item.Appointment.StartDate; end = item.Appointment.EndDate; } else { start = item.Appointment.RepresentingDate.Add(item.Appointment.StartDate.TimeOfDay); end = start.Add(item.Appointment.EndDate - item.Appointment.StartDate); } if (start.Date == RepresentingDate) { startH = start.TimeOfDay.Hours; startM = start.TimeOfDay.Minutes; } else { startH = startM = 0; } int endH; int endM; if (end.Date == RepresentingDate) { endH = end.TimeOfDay.Hours; endM = end.TimeOfDay.Minutes; } else { endH = 24; endM = 0; } double hourHeight = grid.Height / 24; double marginTop = startH * hourHeight + startM * hourHeight / 60; // -1; if (marginTop > grid.Height - DayDetail.CollapsedHeight) { marginTop = grid.Height - DayDetail.CollapsedHeight; // -1; } item.Margin = new Thickness(0, marginTop, 0, 0); double height = endH * hourHeight + endM * hourHeight / 60 - marginTop - 1; // -2; height = height > DayDetail.CollapsedHeight ? height : DayDetail.CollapsedHeight; item.Height = height; int proposedColumn = 1; foreach (DayDetail detail in itemsGrid.Children) { double dTop = detail.Margin.Top; double dHeight = detail.Height; if ((marginTop >= dTop && marginTop <= dTop + dHeight) || (marginTop <= dTop && marginTop + height >= dTop)) { int dCol = Grid.GetColumn(detail); if (dCol >= proposedColumn) { proposedColumn = dCol + 1; } } } if (itemsGrid.ColumnDefinitions.Count - 1 < proposedColumn) { ColumnDefinition def = new ColumnDefinition(); def.Width = new GridLength(1, GridUnitType.Star); itemsGrid.ColumnDefinitions.Add(def); } Grid.SetColumn(item, proposedColumn); Grid.SetColumnSpan(item, 1); }
/// <summary> /// Refreshes entire display. Items in database but not in view will be added, /// while items not in database but in view will be removed. /// </summary> public void Refresh() { if (_isRefreshing) { return; } _isRefreshing = true; Appointment[] appts = AppointmentDatabase.GetAppointments(Date); List <Appointment> addArray = new List <Appointment>(); bool clockGridNeedsLayout = false; if (appts != null) { foreach (Appointment each in appts) { bool contains = false; if (each.AllDay) { foreach (DayDetail detail in stackPanel.Children) { if (detail.Appointment.ID == each.ID) { detail.Appointment = each; detail.InitializeDisplay(); contains = true; break; } } } else { foreach (DayDetail detail in clockGrid.Items) { if (detail.Appointment.ID == each.ID) { detail.Appointment = each; detail.InitializeDisplay(); clockGridNeedsLayout = true; contains = true; break; } } } if (!contains) { addArray.Add(each); } } } List <DayDetail> deleteArray = new List <DayDetail>(); foreach (DayDetail detail in stackPanel.Children) { if (!AppointmentInArray(appts, detail.Appointment.ID) && _activeDetail != detail) { deleteArray.Add(detail); } } foreach (DayDetail detail in clockGrid.Items) { if (!AppointmentInArray(appts, detail.Appointment.ID) && _activeDetail != detail) { deleteArray.Add(detail); } } foreach (DayDetail detail in deleteArray) { detail.AnimatedDelete(false); } if (addArray.Count > 0) { foreach (Appointment each in addArray) { DayDetail detail = new DayDetail(each); AddHandlers(detail); if (each.AllDay) { stackPanel.Children.Add(detail); } else { clockGrid.AddItem(detail); clockGridNeedsLayout = false; } } } if (clockGridNeedsLayout) { clockGrid.Layout(); } _isRefreshing = false; }