196 lines
7.3 KiB
C#
196 lines
7.3 KiB
C#
#if FRAMEWORK20
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.ComponentModel;
|
|
|
|
namespace DevComponents.Schedule.Model
|
|
{
|
|
/// <summary>
|
|
/// Defines monthly recurrence settings.
|
|
/// </summary>
|
|
public class MonthlyRecurrenceSettings : INotifyPropertyChanged, INotifySubPropertyChanged
|
|
{
|
|
#region Internal Implementation
|
|
private AppointmentRecurrence _Recurrence = null;
|
|
/// <summary>
|
|
/// Initializes a new instance of the MonthlyRecurrenceSettings class.
|
|
/// </summary>
|
|
/// <param name="recurrence"></param>
|
|
public MonthlyRecurrenceSettings(AppointmentRecurrence recurrence)
|
|
{
|
|
_Recurrence = recurrence;
|
|
}
|
|
|
|
|
|
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. Property applies only for RecurrenceType Monthly or Yearly.
|
|
/// </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 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 months.
|
|
/// </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 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 eMonthRecurrence _RepeatOnMonths = eMonthRecurrence.All;
|
|
/// <summary>
|
|
/// Gets or sets the months on which appointment is repeated. This property is represented by bit-flag enum
|
|
/// which means that you can combine the values from eMonthRecurrence enum using OR operator to specify multiple values.
|
|
/// Default value is All.
|
|
/// <remarks>
|
|
/// <para>For example you could set this property to eMonthRecurrence.January | eMonthRecurrence.July to repeat appointments on January and July only.</para>
|
|
/// </remarks>
|
|
/// </summary>
|
|
[DefaultValue(eMonthRecurrence.All)]
|
|
public eMonthRecurrence RepeatOnMonths
|
|
{
|
|
get { return _RepeatOnMonths; }
|
|
set
|
|
{
|
|
if (value != _RepeatOnMonths)
|
|
{
|
|
eMonthRecurrence oldValue = _RepeatOnMonths;
|
|
_RepeatOnMonths = value;
|
|
OnRepeatOnMonthsChanged(oldValue, value);
|
|
}
|
|
}
|
|
}
|
|
private void OnRepeatOnMonthsChanged(eMonthRecurrence oldValue, eMonthRecurrence newValue)
|
|
{
|
|
OnPropertyChanged(new PropertyChangedEventArgs("RepeatOnMonths"));
|
|
}
|
|
#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
|
|
|