194 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
#if FRAMEWORK20
 | 
						|
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Text;
 | 
						|
using System.ComponentModel;
 | 
						|
 | 
						|
namespace DevComponents.Schedule.Model
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// Defines yearly recurrence settings.
 | 
						|
    /// </summary>
 | 
						|
    public class YearlyRecurrenceSettings : INotifyPropertyChanged, INotifySubPropertyChanged
 | 
						|
    {
 | 
						|
        #region Internal Implementation
 | 
						|
        private AppointmentRecurrence _Recurrence = null;
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Initializes a new instance of the YearlyRecurrenceSettings class.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="recurrence"></param>
 | 
						|
        public YearlyRecurrenceSettings(AppointmentRecurrence recurrence)
 | 
						|
        {
 | 
						|
            _Recurrence = recurrence;
 | 
						|
        }
 | 
						|
 | 
						|
        private int _RepeatInterval = 1;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the interval between recurring appointments. Default value is 1.
 | 
						|
        /// <remarks>
 | 
						|
        /// For example, setting RepeatInterval to 2 means that appointment will recur every 2 years.
 | 
						|
        /// </remarks>
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(1)]
 | 
						|
        public int RepeatInterval
 | 
						|
        {
 | 
						|
            get { return _RepeatInterval; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _RepeatInterval)
 | 
						|
                {
 | 
						|
                    int oldValue = _RepeatInterval;
 | 
						|
                    _RepeatInterval = value;
 | 
						|
                    OnRepeatIntervalChanged(oldValue, value);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private void OnRepeatIntervalChanged(int oldValue, int newValue)
 | 
						|
        {
 | 
						|
            OnPropertyChanged(new PropertyChangedEventArgs("RepeatInterval"));
 | 
						|
        }
 | 
						|
 | 
						|
        private int _RepeatOnDayOfMonth = 1;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the day of month on which appointment is repeated.
 | 
						|
        /// When RepeatOnRelativeDayInMonth property is set to value other than None value of this property is not used.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(1)]
 | 
						|
        public int RepeatOnDayOfMonth
 | 
						|
        {
 | 
						|
            get { return _RepeatOnDayOfMonth; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _RepeatOnDayOfMonth)
 | 
						|
                {
 | 
						|
                    int oldValue = _RepeatOnDayOfMonth;
 | 
						|
                    _RepeatOnDayOfMonth = value;
 | 
						|
                    OnRepeatOnDayOfMonthChanged(oldValue, value);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private void OnRepeatOnDayOfMonthChanged(int oldValue, int newValue)
 | 
						|
        {
 | 
						|
            OnPropertyChanged(new PropertyChangedEventArgs("RepeatOnDayOfMonth"));
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        private eRelativeDayInMonth _RepeatOnRelativeDayInMonth = eRelativeDayInMonth.None;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether appointment should repeat on first, second, third, fourth or last day in month as specified
 | 
						|
        /// by RepeatOnDayOfMonth property. Default value is None.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(eRelativeDayInMonth.None)]
 | 
						|
        public eRelativeDayInMonth RepeatOnRelativeDayInMonth
 | 
						|
        {
 | 
						|
            get { return _RepeatOnRelativeDayInMonth; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _RepeatOnRelativeDayInMonth)
 | 
						|
                {
 | 
						|
                    eRelativeDayInMonth oldValue = _RepeatOnRelativeDayInMonth;
 | 
						|
                    _RepeatOnRelativeDayInMonth = value;
 | 
						|
                    OnRepeatOnRelativeDayInMonthChanged(oldValue, value);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private void OnRepeatOnRelativeDayInMonthChanged(eRelativeDayInMonth oldValue, eRelativeDayInMonth newValue)
 | 
						|
        {
 | 
						|
            OnPropertyChanged(new PropertyChangedEventArgs("RepeatOnRelativeDayInMonth"));
 | 
						|
        }
 | 
						|
 | 
						|
        private DayOfWeek _RelativeDayOfWeek = DayOfWeek.Monday;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the day of week on which relative repeat as specified by RepeatOnRelativeDayInMonth is effective.
 | 
						|
        /// For example setting RepeatOnRelativeDayInMonth to First and RelativeDayOfWeek to Monday will repeat the appointment on first
 | 
						|
        /// Monday in a month.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(DayOfWeek.Monday)]
 | 
						|
        public DayOfWeek RelativeDayOfWeek
 | 
						|
        {
 | 
						|
            get { return _RelativeDayOfWeek; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value != _RelativeDayOfWeek)
 | 
						|
                {
 | 
						|
                    DayOfWeek oldValue = _RelativeDayOfWeek;
 | 
						|
                    _RelativeDayOfWeek = value;
 | 
						|
                    OnRelativeDayOfWeekChanged(oldValue, value);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private void OnRelativeDayOfWeekChanged(DayOfWeek oldValue, DayOfWeek newValue)
 | 
						|
        {
 | 
						|
            OnPropertyChanged(new PropertyChangedEventArgs("RelativeDayOfWeek"));
 | 
						|
        }
 | 
						|
 | 
						|
        private int _RepeatOnMonth = 1;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the month the appointment is repeated on every year.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(1)]
 | 
						|
        public int RepeatOnMonth
 | 
						|
        {
 | 
						|
            get { return _RepeatOnMonth; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (value < 1 || value > 12)
 | 
						|
                    throw new ArgumentException("Valid RepeatOnMonth values are between 1-12");
 | 
						|
                if (value != _RepeatOnMonth)
 | 
						|
                {
 | 
						|
                    int oldValue = _RepeatOnMonth;
 | 
						|
                    _RepeatOnMonth = value;
 | 
						|
                    OnRepeatOnMonthChanged(oldValue, value);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private void OnRepeatOnMonthChanged(int oldValue, int newValue)
 | 
						|
        {
 | 
						|
            OnPropertyChanged(new PropertyChangedEventArgs("RepeatOnMonth"));
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region INotifyPropertyChanged Members
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs when property value has changed.
 | 
						|
        /// </summary>
 | 
						|
        public event PropertyChangedEventHandler PropertyChanged;
 | 
						|
        /// <summary>
 | 
						|
        /// Raises the PropertyChanged event.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="e">Event arguments</param>
 | 
						|
        protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
 | 
						|
        {
 | 
						|
            PropertyChangedEventHandler eh = PropertyChanged;
 | 
						|
            if (eh != null) eh(this, e);
 | 
						|
            OnSubPropertyChanged(new SubPropertyChangedEventArgs(this, e));
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region INotifySubPropertyChanged Members
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs when property or property of child objects has changed. This event is similar to PropertyChanged event with key
 | 
						|
        /// difference that it occurs for the property changed of child objects as well.
 | 
						|
        /// </summary>
 | 
						|
        public event SubPropertyChangedEventHandler SubPropertyChanged;
 | 
						|
        /// <summary>
 | 
						|
        /// Raises the SubPropertyChanged event.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="e">Event arguments</param>
 | 
						|
        protected virtual void OnSubPropertyChanged(SubPropertyChangedEventArgs e)
 | 
						|
        {
 | 
						|
            SubPropertyChangedEventHandler eh = SubPropertyChanged;
 | 
						|
            if (eh != null) eh(this, e);
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
}
 | 
						|
#endif
 | 
						|
 |