using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
namespace DevComponents.Schedule.Model
{
///
/// Defines a working day.
///
public abstract class BaseWorkDay : INotifyPropertyChanged, INotifySubPropertyChanged
{
#region Internal Implementation
protected WorkTime _WorkStartTime = new WorkTime(8, 0);
///
/// Gets or sets the work start time.
///
public WorkTime WorkStartTime
{
get { return _WorkStartTime; }
set
{
WorkTime oldValue = _WorkStartTime;
_WorkStartTime = value;
OnWorkStartTimeChanged(oldValue, value);
}
}
///
/// Called when WorkStartTime has changed.
///
/// Old property value.
/// New property value.
protected virtual void OnWorkStartTimeChanged(WorkTime oldValue, WorkTime newValue)
{
OnPropertyChanged(new PropertyChangedEventArgs("WorkStartTime"));
}
protected WorkTime _WorkEndTime = new WorkTime(17, 0);
///
/// Gets or sets the work end time.
///
public WorkTime WorkEndTime
{
get { return _WorkEndTime; }
set
{
WorkTime oldValue = _WorkEndTime;
_WorkEndTime = value;
OnWorkEndTimeChanged(oldValue, value);
}
}
///
/// Called when WorkEndTime has changed.
///
/// Old property value.
/// New property value.
protected virtual void OnWorkEndTimeChanged(WorkTime oldValue, WorkTime newValue)
{
OnPropertyChanged(new PropertyChangedEventArgs("WorkEndTime"));
}
private CalendarModel _Calendar = null;
///
/// Gets the calendar work day is associated with.
///
[Browsable(false)]
public CalendarModel Calendar
{
get { return _Calendar; }
internal set
{
if (_Calendar != value)
{
_Calendar = value;
}
}
}
#endregion
#region INotifyPropertyChanged Members
///
/// Occurs when property value has changed.
///
public event PropertyChangedEventHandler PropertyChanged;
///
/// Raises the PropertyChanged event.
///
/// Event arguments
protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
PropertyChangedEventHandler eh = PropertyChanged;
if (eh != null) eh(this, e);
OnSubPropertyChanged(new SubPropertyChangedEventArgs(this, e));
}
#endregion
#region INotifySubPropertyChanged Members
///
/// 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.
///
public event SubPropertyChangedEventHandler SubPropertyChanged;
///
/// Raises the SubPropertyChanged event.
///
/// Event arguments
protected virtual void OnSubPropertyChanged(SubPropertyChangedEventArgs e)
{
SubPropertyChangedEventHandler eh = SubPropertyChanged;
if (eh != null) eh(this, e);
}
#endregion
}
}