예제 #1
0
        private static void OnWeekendsVisibleChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            MultiDayViewSettings settings = (MultiDayViewSettings)sender;

            settings.Invalidate(MultiDayViewUpdateFlag.All);
            settings.owner?.UpdateNavigationHeaderContent();
        }
예제 #2
0
        private static void OnVisibleDaysChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            MultiDayViewSettings settings = (MultiDayViewSettings)sender;

            int value = (int)args.NewValue;

            if (value > DefaultMultiDayViewVisibleDays)
            {
                settings.ChangePropertyInternally(MultiDayViewSettings.VisibleDaysProperty, DefaultMultiDayViewVisibleDays);
            }
            else if (value < MinimumtMultiDayViewVisibleDays)
            {
                settings.ChangePropertyInternally(MultiDayViewSettings.VisibleDaysProperty, MinimumtMultiDayViewVisibleDays);
            }
            else
            {
                settings.Invalide(MultiDayViewUpdateFlag.All);
                settings.owner?.UpdateNavigationHeaderContent();

                if (value < settings.NavigationStep)
                {
                    settings.ChangePropertyInternally(MultiDayViewSettings.NavigationStepProperty, value);
                }
            }
        }
예제 #3
0
        private static void OnAllDayAreaTextBorderStyleChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            MultiDayViewSettings settings = (MultiDayViewSettings)sender;

            settings.allDayAreaTextBorderStyleCache = (Style)args.NewValue;
            MultiDayViewSettings.UpdateAllDayAreaText(settings);
        }
예제 #4
0
 private static void UpdateAllDayAreaText(MultiDayViewSettings settings)
 {
     if (settings.IsOwnerLoaded)
     {
         CalendarModel             model             = settings.owner.Model;
         CalendarMultiDayViewModel multiDayViewModel = model.multiDayViewModel;
         settings.owner.timeRulerLayer.UpdateTimeRulerAllDayText(multiDayViewModel.allDayLabelLayout);
     }
 }
예제 #5
0
        private static void OnMultiDayViewHeaderTextPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            MultiDayViewSettings settings = (MultiDayViewSettings)sender;

            if (settings.IsOwnerLoaded)
            {
                settings.owner.UpdateNavigationHeaderContent();
            }
        }
예제 #6
0
        private static void OnTodaySlotStyleChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            MultiDayViewSettings settings = (MultiDayViewSettings)sender;

            settings.todaySlotStyleCache = (Style)args.NewValue;
            if (settings.IsOwnerLoaded)
            {
                settings.owner.timeRulerLayer.UpdateTodaySlot();
            }
        }
예제 #7
0
        private static void OnCurrentTimeIndicatorStyleChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            MultiDayViewSettings settings = (MultiDayViewSettings)sender;

            settings.currentTimeIndicatorStyleCache = (Style)args.NewValue;

            if (settings.IsOwnerLoaded)
            {
                settings.owner.timeRulerLayer.UpdateCurrentTimeIndicator();
            }
        }
예제 #8
0
        private static void OnTimeRulerItemStyleSelectorChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            MultiDayViewSettings settings = (MultiDayViewSettings)sender;

            settings.timeRulerItemStyleSelectorCache = (CalendarTimeRulerItemStyleSelector)args.NewValue;

            if (settings.IsOwnerLoaded)
            {
                settings.owner.timeRulerLayer.UpdateUI();
            }
        }
예제 #9
0
        private static void OnSpecialSlotStyleSelectorPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            MultiDayViewSettings settings = (MultiDayViewSettings)sender;

            settings.specialSlotStyleSelectorCache = (StyleSelector)args.NewValue;

            if (settings.IsOwnerLoaded)
            {
                settings.owner.timeRulerLayer.UpdateSlots(settings.SpecialSlotsSource);
            }
        }
예제 #10
0
        private static void OnAllDayAreaBorderStyleChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            MultiDayViewSettings settings = (MultiDayViewSettings)sender;

            settings.allDayAreaBorderStyleCache = (Style)args.NewValue;

            if (settings.IsOwnerLoaded)
            {
                CalendarModel             model             = settings.owner.Model;
                CalendarMultiDayViewModel multiDayViewModel = model.multiDayViewModel;
                settings.owner.timeRulerLayer.UpdateTimeRulerDecorations(multiDayViewModel, model.AreDayNamesVisible);
            }
        }
예제 #11
0
        private static void OnDayEndTimeChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            MultiDayViewSettings settings = (MultiDayViewSettings)sender;

            long ticks = ((TimeSpan)args.NewValue).Ticks;

            if (ticks < settings.DayStartTime.Ticks)
            {
                throw new ArgumentException("Start date must be earlier than end date.");
            }

            settings.UpdateDayRange(ticks, MultiDayViewSettings.DayEndTimeProperty);
        }
예제 #12
0
        private static void OnNavigationStepPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            MultiDayViewSettings settings = (MultiDayViewSettings)sender;

            int navigationStep = (int)args.NewValue;

            if (navigationStep > settings.VisibleDays)
            {
                settings.ChangePropertyInternally(MultiDayViewSettings.NavigationStepProperty, settings.VisibleDays);
            }
            else if (navigationStep < MinimumtMultiDayViewVisibleDays)
            {
                settings.ChangePropertyInternally(MultiDayViewSettings.NavigationStepProperty, MinimumtMultiDayViewVisibleDays);
            }
        }
예제 #13
0
        private static void OnSpecialSlotsSourcePropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            MultiDayViewSettings     settings       = (MultiDayViewSettings)sender;
            INotifyCollectionChanged oldSlotsSource = args.OldValue as INotifyCollectionChanged;

            if (oldSlotsSource != null)
            {
                var listener = settings.specialSlotsCollectionChangedListener;
                if (listener != null)
                {
                    listener.Detach();
                    listener = null;
                }

                int count = settings.specialSlotsPropertyChangedListeners != null ? settings.specialSlotsPropertyChangedListeners.Count : 0;
                while (count > 0)
                {
                    var propertyListener = settings.specialSlotsPropertyChangedListeners[0];
                    settings.specialSlotsPropertyChangedListeners.RemoveAt(0);
                    propertyListener.Detach();
                    propertyListener = null;
                    count--;
                }
            }

            INotifyCollectionChanged newSlotsSource = args.NewValue as INotifyCollectionChanged;

            if (newSlotsSource != null)
            {
                settings.specialSlotsCollectionChangedListener = WeakCollectionChangedListener.CreateIfNecessary(newSlotsSource, settings);

                foreach (Slot slot in (IEnumerable <Slot>)newSlotsSource)
                {
                    var listener = WeakPropertyChangedListener.CreateIfNecessary(slot, settings);
                    if (listener != null)
                    {
                        settings.specialSlotsPropertyChangedListeners.Add(listener);
                    }
                }
            }

            if (oldSlotsSource != null && settings.IsOwnerLoaded)
            {
                settings.owner.timeRulerLayer.RecycleSlots((IEnumerable <Slot>)oldSlotsSource);
            }

            settings.Invalide(MultiDayViewUpdateFlag.AffectsSpecialSlots);
        }
예제 #14
0
        private static void OnShowCurrentTimeIndicator(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            MultiDayViewSettings settings            = (MultiDayViewSettings)sender;
            bool shouldVisualizeCurrentTimeIndicator = (bool)args.NewValue;

            if (shouldVisualizeCurrentTimeIndicator)
            {
                settings.timer.Start();
            }
            else
            {
                settings.timer.Stop();
            }

            settings.Invalide(MultiDayViewUpdateFlag.AffectsCurrentTimeIndicator);
        }
예제 #15
0
        private static void OnTimerRulerTickLengthChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            MultiDayViewSettings settings = (MultiDayViewSettings)sender;

            long ticks = ((TimeSpan)args.NewValue).Ticks;

            if (ticks > TimeSpan.TicksPerDay)
            {
                settings.ChangePropertyInternally(MultiDayViewSettings.TimerRulerTickLengthProperty, TimeSpan.TicksPerDay);
            }
            else if (ticks < TimeSpan.FromMinutes(MinimumTicksPerDay).Ticks)
            {
                settings.ChangePropertyInternally(MultiDayViewSettings.TimerRulerTickLengthProperty, TimeSpan.FromMinutes(MinimumTicksPerDay));
            }
            else
            {
                settings.Invalide(MultiDayViewUpdateFlag.AffectsTimeRuler);
            }
        }
예제 #16
0
        private static void OnAllDayAreaTextChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            MultiDayViewSettings settings = (MultiDayViewSettings)sender;

            MultiDayViewSettings.UpdateAllDayAreaText(settings);
        }
예제 #17
0
        private static void OnTimelineBackgroundChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            MultiDayViewSettings settings = (MultiDayViewSettings)sender;

            settings.UpdateAppearance(MultiDayViewUpdateFlag.AffectsTimeRuler);
        }
예제 #18
0
        private static void OnAllDayAreaBackgroundChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            MultiDayViewSettings settings = (MultiDayViewSettings)sender;

            settings.UpdateAppearance(MultiDayViewUpdateFlag.AffectsAppointments);
        }
예제 #19
0
        private static void OnAllDayAppointmentSpacingChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            MultiDayViewSettings settings = (MultiDayViewSettings)sender;

            settings.Invalide(MultiDayViewUpdateFlag.AffectsAppointments);
        }
예제 #20
0
        private static void OnTimeLinesSpacingChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            MultiDayViewSettings settings = (MultiDayViewSettings)sender;

            settings.Invalide(MultiDayViewUpdateFlag.AffectsTimeRuler);
        }