917 lines
22 KiB
C#
917 lines
22 KiB
C#
using System;
|
|
using System.Collections.ObjectModel;
|
|
using System.Drawing;
|
|
using DevComponents.Schedule.Model;
|
|
|
|
namespace DevComponents.DotNetBar.Schedule
|
|
{
|
|
/// <summary>
|
|
/// ViewDisplayCustomizations
|
|
/// </summary>
|
|
public class ViewDisplayCustomizations
|
|
{
|
|
#region Events
|
|
|
|
/// <summary>
|
|
/// Occurs when the ViewDisplayCustomizations have changed
|
|
/// </summary>
|
|
public event EventHandler<EventArgs> CollectionChanged;
|
|
|
|
#endregion
|
|
|
|
#region Private variables
|
|
|
|
private CalendarView _CalendarView;
|
|
private DaySlotBackgrounds _DaySlotBackgrounds;
|
|
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// ViewDisplayCustomizations
|
|
/// </summary>
|
|
/// <param name="calendarView"></param>
|
|
public ViewDisplayCustomizations(CalendarView calendarView)
|
|
{
|
|
_CalendarView = calendarView;
|
|
}
|
|
|
|
#region Public properties
|
|
|
|
/// <summary>
|
|
/// DaySlotBackgrounds
|
|
/// </summary>
|
|
public DaySlotBackgrounds DaySlotBackgrounds
|
|
{
|
|
get
|
|
{
|
|
if (_DaySlotBackgrounds == null)
|
|
{
|
|
_DaySlotBackgrounds = new DaySlotBackgrounds();
|
|
_DaySlotBackgrounds.CollectionChanged += _DaySlotBackgrounds_CollectionChanged;
|
|
}
|
|
|
|
return (_DaySlotBackgrounds);
|
|
}
|
|
|
|
set
|
|
{
|
|
if (_DaySlotBackgrounds != null)
|
|
_DaySlotBackgrounds.CollectionChanged -= _DaySlotBackgrounds_CollectionChanged;
|
|
|
|
_DaySlotBackgrounds = value;
|
|
|
|
if (_DaySlotBackgrounds != null)
|
|
_DaySlotBackgrounds.CollectionChanged += _DaySlotBackgrounds_CollectionChanged;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Event handling
|
|
|
|
/// <summary>
|
|
/// Handles DaySlotBackgrounds CollectionChanged events
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
void _DaySlotBackgrounds_CollectionChanged(object sender, EventArgs e)
|
|
{
|
|
_CalendarView.Refresh();
|
|
|
|
if (CollectionChanged != null)
|
|
CollectionChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region GetDaySlotAppearance
|
|
|
|
/// <summary>
|
|
/// Retrieves the DaySlotAppearance from the given criteris
|
|
/// </summary>
|
|
/// <param name="ownerKey"></param>
|
|
/// <param name="dateTime"></param>
|
|
/// <param name="wkStart"></param>
|
|
/// <param name="wkEnd"></param>
|
|
/// <returns></returns>
|
|
internal DaySlotAppearance GetDaySlotAppearance(
|
|
string ownerKey, DateTime dateTime, WorkTime wkStart, WorkTime wkEnd)
|
|
{
|
|
foreach (DaySlotBackground dsb in DaySlotBackgrounds)
|
|
{
|
|
if (IsValidSlot(dsb, dateTime, wkStart, wkEnd) == true)
|
|
{
|
|
if (IsValidOwner(dsb, ownerKey) == true)
|
|
return (dsb.Appearance);
|
|
}
|
|
}
|
|
|
|
return (null);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region IsValidSlot
|
|
|
|
/// <summary>
|
|
/// Determines if the given slot is a valid
|
|
/// day and time slot
|
|
/// </summary>
|
|
/// <param name="dsb"></param>
|
|
/// <param name="dateTime"></param>
|
|
/// <param name="wkStart"></param>
|
|
/// <param name="wkEnd"></param>
|
|
/// <returns></returns>
|
|
private bool IsValidSlot(DaySlotBackground dsb,
|
|
DateTime dateTime, WorkTime wkStart, WorkTime wkEnd)
|
|
{
|
|
if (IsValidDaySlot(dsb, dateTime) == true)
|
|
return (IsValidTimeSlot(dsb, wkStart, wkEnd));
|
|
|
|
return (false);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region IsValidTimeSlot
|
|
|
|
/// <summary>
|
|
/// Determines if the given slot is a valid time slot
|
|
/// </summary>
|
|
/// <param name="dsb"></param>
|
|
/// <param name="wkStart"></param>
|
|
/// <param name="wkEnd"></param>
|
|
/// <returns></returns>
|
|
private bool IsValidTimeSlot(DaySlotBackground dsb, WorkTime wkStart, WorkTime wkEnd)
|
|
{
|
|
return (wkStart < dsb.Appearance.EndTime && wkEnd > dsb.Appearance.StartTime);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region IsValidDaySlot
|
|
|
|
/// <summary>
|
|
/// Determines if the given slot is a valid time slot
|
|
/// </summary>
|
|
/// <param name="dsb"></param>
|
|
/// <param name="dateTime"></param>
|
|
/// <returns></returns>
|
|
private bool IsValidDaySlot(DaySlotBackground dsb, DateTime dateTime)
|
|
{
|
|
if (dsb.DateTime == DateTime.MinValue)
|
|
return (dsb.DayOfWeek == dateTime.DayOfWeek);
|
|
|
|
return (dsb.DateTime.Date == dateTime.Date);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region IsValidOwner
|
|
|
|
/// <summary>
|
|
/// Determines if the given owner key is valid for the slot
|
|
/// </summary>
|
|
/// <param name="dsb"></param>
|
|
/// <param name="ownerKey"></param>
|
|
/// <returns></returns>
|
|
private bool IsValidOwner(DaySlotBackground dsb, string ownerKey)
|
|
{
|
|
if (dsb.HasOwnerKeys == true)
|
|
{
|
|
if (dsb.OwnerKeys.Contains("") == true)
|
|
return (true);
|
|
|
|
if (dsb.OwnerKeys.Contains(ownerKey) == false)
|
|
return (false);
|
|
}
|
|
|
|
return (true);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
|
|
/// <summary>
|
|
/// DaySlotBackgrounds
|
|
/// </summary>
|
|
public class DaySlotBackgrounds : Collection<DaySlotBackground>
|
|
{
|
|
#region Events
|
|
|
|
/// <summary>
|
|
/// Occurs when the DaySlotBackgrounds collection changes
|
|
/// </summary>
|
|
public event EventHandler<EventArgs> CollectionChanged;
|
|
|
|
#endregion
|
|
|
|
#region Private variables
|
|
|
|
private bool _IsRangeSet;
|
|
private bool _SuspendUpdate;
|
|
|
|
#endregion
|
|
|
|
#region Internal properties
|
|
|
|
/// <summary>
|
|
/// Gets and sets the SuspendUpdate state
|
|
/// </summary>
|
|
internal bool SuspendUpdate
|
|
{
|
|
get { return (_SuspendUpdate); }
|
|
set { _SuspendUpdate = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Remove
|
|
|
|
/// <summary>
|
|
/// Removes the DaySlotBackground for the given DateTime
|
|
/// </summary>
|
|
/// <param name="dateTime"></param>
|
|
public void Remove(DateTime dateTime)
|
|
{
|
|
int n = Items.Count;
|
|
|
|
try
|
|
{
|
|
SuspendUpdate = true;
|
|
|
|
for (int i = Items.Count - 1; i >= 0; i--)
|
|
{
|
|
DaySlotBackground dsb = Items[i];
|
|
|
|
if (dsb.DateTime.Equals(dateTime) == true)
|
|
RemoveAt(i);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
SuspendUpdate = false;
|
|
|
|
if (Items.Count != n)
|
|
OnCollectionChanged();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Removes the DaySlotBackground for the given DayOfWeek
|
|
/// </summary>
|
|
/// <param name="dayOfWeek"></param>
|
|
public void Remove(DayOfWeek dayOfWeek)
|
|
{
|
|
int n = Items.Count;
|
|
|
|
try
|
|
{
|
|
SuspendUpdate = true;
|
|
|
|
for (int i = Items.Count - 1; i >= 0; i--)
|
|
{
|
|
DaySlotBackground dsb = Items[i];
|
|
|
|
if (dsb.DateTime.Equals(DateTime.MinValue) == true)
|
|
{
|
|
if (dsb.DayOfWeek == dayOfWeek)
|
|
RemoveAt(i);
|
|
}
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
SuspendUpdate = false;
|
|
|
|
if (Items.Count != n)
|
|
OnCollectionChanged();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region AddRange
|
|
|
|
/// <summary>
|
|
/// Adds a range of DaySlotBackgrounds
|
|
/// </summary>
|
|
/// <param name="daySlotBackgrounds"></param>
|
|
public void AddRange(DaySlotBackgrounds daySlotBackgrounds)
|
|
{
|
|
try
|
|
{
|
|
_IsRangeSet = true;
|
|
|
|
foreach (DaySlotBackground dsb in daySlotBackgrounds)
|
|
Add(dsb);
|
|
}
|
|
finally
|
|
{
|
|
_IsRangeSet = false;
|
|
|
|
OnCollectionChanged();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region RemoveItem
|
|
|
|
/// <summary>
|
|
/// Processes list RemoveItem calls
|
|
/// </summary>
|
|
/// <param name="index">Index to remove</param>
|
|
protected override void RemoveItem(int index)
|
|
{
|
|
base.RemoveItem(index);
|
|
|
|
OnCollectionChanged();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region InsertItem
|
|
|
|
/// <summary>
|
|
/// Processes list InsertItem calls
|
|
/// </summary>
|
|
/// <param name="index">Index to add</param>
|
|
/// <param name="item">Text to add</param>
|
|
protected override void InsertItem(int index, DaySlotBackground item)
|
|
{
|
|
if (item != null)
|
|
{
|
|
base.InsertItem(index, item);
|
|
|
|
item.DaySlotBackgrounds = this;
|
|
|
|
OnCollectionChanged();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region SetItem
|
|
|
|
/// <summary>
|
|
/// Processes list SetItem calls (e.g. replace)
|
|
/// </summary>
|
|
/// <param name="index">Index to replace</param>
|
|
/// <param name="newItem">Text to replace</param>
|
|
protected override void SetItem(int index, DaySlotBackground newItem)
|
|
{
|
|
base.SetItem(index, newItem);
|
|
|
|
newItem.DaySlotBackgrounds = this;
|
|
|
|
OnCollectionChanged();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ClearItems
|
|
|
|
/// <summary>
|
|
/// Processes list Clear calls (e.g. remove all)
|
|
/// </summary>
|
|
protected override void ClearItems()
|
|
{
|
|
if (Count > 0)
|
|
{
|
|
base.ClearItems();
|
|
|
|
OnCollectionChanged();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region OnCollectionChanged
|
|
|
|
/// <summary>
|
|
/// Handles collection change notification
|
|
/// </summary>
|
|
private void OnCollectionChanged()
|
|
{
|
|
if (_SuspendUpdate == false && _IsRangeSet == false)
|
|
{
|
|
if (CollectionChanged != null)
|
|
CollectionChanged(this, EventArgs.Empty);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
|
|
/// <summary>
|
|
/// DaySlotBackground
|
|
/// </summary>
|
|
public class DaySlotBackground
|
|
{
|
|
#region Events
|
|
|
|
/// <summary>
|
|
/// Occurs when the DaySlotBackground collection changes
|
|
/// </summary>
|
|
public event EventHandler<EventArgs> CollectionChanged;
|
|
|
|
#endregion
|
|
|
|
#region Private variables
|
|
|
|
private DayOfWeek _DayOfWeek;
|
|
private DateTime _DateTime = DateTime.MinValue;
|
|
|
|
private DaySlotAppearance _Appearance;
|
|
private DaySlotBackgrounds _DaySlotBackgrounds;
|
|
|
|
private OwnerKeyCollection _OwnerKeys;
|
|
|
|
#endregion
|
|
|
|
#region Constructors
|
|
|
|
public DaySlotBackground(DateTime dateTime, DaySlotAppearance appearance)
|
|
{
|
|
_DateTime = dateTime;
|
|
|
|
_Appearance = appearance;
|
|
}
|
|
|
|
public DaySlotBackground(DayOfWeek dayOfWeek, DaySlotAppearance appearance)
|
|
{
|
|
_DayOfWeek = dayOfWeek;
|
|
_DateTime = DateTime.MinValue;
|
|
|
|
_Appearance = appearance;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Public properties
|
|
|
|
#region Appearance
|
|
|
|
/// <summary>
|
|
/// Gets or sets the Appearance
|
|
/// </summary>
|
|
public DaySlotAppearance Appearance
|
|
{
|
|
get { return (_Appearance); }
|
|
|
|
set
|
|
{
|
|
_Appearance = value;
|
|
|
|
OnCollectionChanged();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region DateTime
|
|
|
|
/// <summary>
|
|
/// Gets or sets the DateTime
|
|
/// </summary>
|
|
public DateTime DateTime
|
|
{
|
|
get { return (_DateTime); }
|
|
|
|
set
|
|
{
|
|
if (_DateTime != value)
|
|
{
|
|
_DateTime = value;
|
|
|
|
OnCollectionChanged();
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region DayOfWeek
|
|
|
|
/// <summary>
|
|
/// Gets or sets the DayOfWeek
|
|
/// </summary>
|
|
public DayOfWeek DayOfWeek
|
|
{
|
|
get { return (_DayOfWeek); }
|
|
|
|
set
|
|
{
|
|
if (_DayOfWeek != value)
|
|
{
|
|
_DayOfWeek = value;
|
|
|
|
OnCollectionChanged();
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region OwnerKeys
|
|
|
|
/// <summary>
|
|
/// Gets or sets the OwnerKeyCollection
|
|
/// </summary>
|
|
public OwnerKeyCollection OwnerKeys
|
|
{
|
|
get
|
|
{
|
|
if (_OwnerKeys == null)
|
|
{
|
|
_OwnerKeys = new OwnerKeyCollection();
|
|
|
|
_OwnerKeys.CollectionChanged += OwnerKeys_CollectionChanged;
|
|
}
|
|
|
|
return (_OwnerKeys);
|
|
}
|
|
|
|
set
|
|
{
|
|
if (_OwnerKeys != null)
|
|
_OwnerKeys.CollectionChanged -= OwnerKeys_CollectionChanged;
|
|
|
|
_OwnerKeys = value;
|
|
|
|
if (_OwnerKeys != null)
|
|
_OwnerKeys.CollectionChanged += OwnerKeys_CollectionChanged;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region Internal properties
|
|
|
|
#region DaySlotBackgrounds
|
|
|
|
/// <summary>
|
|
/// Gets or sets the DaySlotBackgrounds
|
|
/// </summary>
|
|
internal DaySlotBackgrounds DaySlotBackgrounds
|
|
{
|
|
get { return (_DaySlotBackgrounds); }
|
|
|
|
set
|
|
{
|
|
_DaySlotBackgrounds = value;
|
|
|
|
OnCollectionChanged();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region HasOwnerKeys
|
|
|
|
/// <summary>
|
|
/// HasOwnerKeys
|
|
/// </summary>
|
|
internal bool HasOwnerKeys
|
|
{
|
|
get { return (_OwnerKeys != null && _OwnerKeys.Count > 0); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region Event processing
|
|
|
|
/// <summary>
|
|
/// Processes OwnerKeys_CollectionChanged events
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void OwnerKeys_CollectionChanged(object sender, EventArgs e)
|
|
{
|
|
OnCollectionChanged();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region OnCollectionChanged
|
|
|
|
/// <summary>
|
|
/// Handles collection change notification
|
|
/// </summary>
|
|
private void OnCollectionChanged()
|
|
{
|
|
if (CollectionChanged != null)
|
|
CollectionChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
|
|
/// <summary>
|
|
/// DaySlotAppearance
|
|
/// </summary>
|
|
public class DaySlotAppearance
|
|
{
|
|
#region Private variables
|
|
|
|
private WorkTime _StartTime;
|
|
private WorkTime _EndTime;
|
|
|
|
private Color _BackColor;
|
|
private Color _HourBorderColor;
|
|
private Color _HalfHourBorderColor;
|
|
|
|
private string _Text;
|
|
private ContentAlignment _TextAlignment;
|
|
private Color _TextColor;
|
|
private Color _SelectedTextColor;
|
|
private Font _Font;
|
|
|
|
private bool _OnTop;
|
|
private bool _ShowTextWhenSelected = true;
|
|
|
|
#endregion
|
|
|
|
#region Constructors
|
|
|
|
public DaySlotAppearance(WorkTime startTime, WorkTime endTime,
|
|
Color backColor, Color hourBorderColor, Color halfHourBorderColor)
|
|
{
|
|
_StartTime = startTime;
|
|
_EndTime = endTime;
|
|
|
|
_BackColor = backColor;
|
|
_HourBorderColor = hourBorderColor;
|
|
_HalfHourBorderColor = halfHourBorderColor;
|
|
}
|
|
|
|
public DaySlotAppearance(int startHour, int startMinute,
|
|
int endHour, int endMinute, Color backColor, Color hourBorderColor, Color halfHourBorderColor)
|
|
: this(new WorkTime(startHour, startMinute), new WorkTime(endHour, endMinute), backColor, hourBorderColor, halfHourBorderColor)
|
|
{
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Public properties
|
|
|
|
#region BackColor
|
|
|
|
/// <summary>
|
|
/// Gets or sets the BackColor
|
|
/// </summary>
|
|
public Color BackColor
|
|
{
|
|
get { return (_BackColor); }
|
|
set { _BackColor = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region EndTime
|
|
|
|
/// <summary>
|
|
/// Gets or sets the Appearance end time
|
|
/// </summary>
|
|
public WorkTime EndTime
|
|
{
|
|
get { return (_EndTime); }
|
|
set { _EndTime = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Font
|
|
|
|
/// <summary>
|
|
/// Gets or sets the DaySlot Font
|
|
/// </summary>
|
|
public Font Font
|
|
{
|
|
get { return (_Font); }
|
|
set { _Font = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region HalfHourBorderColor
|
|
|
|
/// <summary>
|
|
/// Gets or sets the HalfHourBorderColor
|
|
/// </summary>
|
|
public Color HalfHourBorderColor
|
|
{
|
|
get { return (_HalfHourBorderColor); }
|
|
set { _HalfHourBorderColor = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region HourBorderColor
|
|
|
|
/// <summary>
|
|
/// Gets or sets the HourBorderColor
|
|
/// </summary>
|
|
public Color HourBorderColor
|
|
{
|
|
get { return (_HourBorderColor); }
|
|
set { _HourBorderColor = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region OnTop
|
|
|
|
/// <summary>
|
|
/// Gets or sets whether the Text is on top of the borders
|
|
/// </summary>
|
|
public bool OnTop
|
|
{
|
|
get { return (_OnTop); }
|
|
set { _OnTop = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region StartTime
|
|
|
|
/// <summary>
|
|
/// Gets or sets the Appearance start time
|
|
/// </summary>
|
|
public WorkTime StartTime
|
|
{
|
|
get { return (_StartTime); }
|
|
set { _StartTime = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Text
|
|
|
|
/// <summary>
|
|
/// Gets or sets the Text
|
|
/// </summary>
|
|
public string Text
|
|
{
|
|
get { return (_Text); }
|
|
set { _Text = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region TextAlignment
|
|
|
|
/// <summary>
|
|
/// Gets or sets the Text Alignment
|
|
/// </summary>
|
|
public ContentAlignment TextAlignment
|
|
{
|
|
get { return (_TextAlignment); }
|
|
set { _TextAlignment = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region TextColor
|
|
|
|
/// <summary>
|
|
/// Gets or sets the Text Color
|
|
/// </summary>
|
|
public Color TextColor
|
|
{
|
|
get { return (_TextColor); }
|
|
set { _TextColor = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region SelectedTextColor
|
|
|
|
/// <summary>
|
|
/// Gets or sets the Selected Text Color
|
|
/// </summary>
|
|
public Color SelectedTextColor
|
|
{
|
|
get { return (_SelectedTextColor); }
|
|
set { _SelectedTextColor = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ShowTextWhenSelected
|
|
|
|
/// <summary>
|
|
/// Gets or sets wheter the Text is displayed when cells are selected
|
|
/// </summary>
|
|
public bool ShowTextWhenSelected
|
|
{
|
|
get { return (_ShowTextWhenSelected); }
|
|
set { _ShowTextWhenSelected = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
}
|
|
|
|
/// <summary>
|
|
/// OwnerKeyCollection
|
|
/// </summary>
|
|
public class OwnerKeyCollection : Collection<string>
|
|
{
|
|
#region Events
|
|
|
|
/// <summary>
|
|
/// Occurs when the OwnerKeyCollection changes
|
|
/// </summary>
|
|
public event EventHandler<EventArgs> CollectionChanged;
|
|
|
|
#endregion
|
|
|
|
#region RemoveItem
|
|
|
|
/// <summary>
|
|
/// Processes list RemoveItem calls
|
|
/// </summary>
|
|
/// <param name="index">Index to remove</param>
|
|
protected override void RemoveItem(int index)
|
|
{
|
|
base.RemoveItem(index);
|
|
|
|
OnCollectionChanged();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region InsertItem
|
|
|
|
/// <summary>
|
|
/// Processes list InsertItem calls
|
|
/// </summary>
|
|
/// <param name="index">Index to add</param>
|
|
/// <param name="item">Text to add</param>
|
|
protected override void InsertItem(int index, string item)
|
|
{
|
|
if (item != null)
|
|
{
|
|
base.InsertItem(index, item);
|
|
|
|
OnCollectionChanged();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region SetItem
|
|
|
|
/// <summary>
|
|
/// Processes list SetItem calls (e.g. replace)
|
|
/// </summary>
|
|
/// <param name="index">Index to replace</param>
|
|
/// <param name="newItem">Text to replace</param>
|
|
protected override void SetItem(int index, string newItem)
|
|
{
|
|
base.SetItem(index, newItem);
|
|
|
|
OnCollectionChanged();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ClearItems
|
|
|
|
/// <summary>
|
|
/// Processes list Clear calls (e.g. remove all)
|
|
/// </summary>
|
|
protected override void ClearItems()
|
|
{
|
|
if (Count > 0)
|
|
{
|
|
base.ClearItems();
|
|
|
|
OnCollectionChanged();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region OnCollectionChanged
|
|
|
|
/// <summary>
|
|
/// Handles collection change notification
|
|
/// </summary>
|
|
private void OnCollectionChanged()
|
|
{
|
|
if (CollectionChanged != null)
|
|
CollectionChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|