public void InsertItem(DayDetail item, int index)
        {
            ModifyItem(item);
            itemsGrid.Children.Insert(index, item);

            UpdateColumnSpans();
        }
示例#2
0
        /// <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();
        }
示例#4
0
        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;
            }
        }
示例#5
0
        private void detail_OnBeginEditEvent(object sender, EventArgs e)
        {
            DayDetail _sender = (DayDetail)sender;

            _activeDetail = _sender;
            IsChecked     = true;
            BeginEditEvent(EventArgs.Empty);
        }
示例#6
0
 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;
 }
示例#7
0
 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);
            }
        }
示例#10
0
        /// <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();
        }
示例#11
0
        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();
            }
        }
示例#12
0
        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);
        }
示例#14
0
        /// <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;
        }