e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
178 lines
5.6 KiB
C#
178 lines
5.6 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="SelectedDatesCollection.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//------------------------------------------------------------------------------
|
|
|
|
namespace System.Web.UI.WebControls {
|
|
|
|
using System;
|
|
using System.Collections;
|
|
|
|
/// <devdoc>
|
|
/// <para>Encapsulates the collection of <see cref='System.Web.UI.WebControls.Calendar.SelectedDates'/> within a <see cref='System.Web.UI.WebControls.Calendar'/> control.</para>
|
|
/// </devdoc>
|
|
public sealed class SelectedDatesCollection : ICollection {
|
|
|
|
private ArrayList dateList;
|
|
|
|
|
|
/// <devdoc>
|
|
/// <para>Initializes a new instance of the <see cref='System.Web.UI.WebControls.SelectedDatesCollection'/> class
|
|
/// with the specified date list.</para>
|
|
/// </devdoc>
|
|
public SelectedDatesCollection(ArrayList dateList) {
|
|
this.dateList = dateList;
|
|
}
|
|
|
|
|
|
/// <devdoc>
|
|
/// <para>Gets the item count of the collection.</para>
|
|
/// </devdoc>
|
|
public int Count {
|
|
get {
|
|
return dateList.Count;
|
|
}
|
|
}
|
|
|
|
|
|
/// <devdoc>
|
|
/// <para>Gets a <see cref='System.DateTime' qualify='true'/> referenced by the specified ordinal index value in the collection.</para>
|
|
/// </devdoc>
|
|
public DateTime this[int index] {
|
|
get {
|
|
return(DateTime) dateList[index];
|
|
}
|
|
}
|
|
|
|
|
|
/// <devdoc>
|
|
/// <para>Adds the specified <see cref='System.DateTime'/> to the end of the collection.</para>
|
|
/// </devdoc>
|
|
public void Add(DateTime date) {
|
|
int index;
|
|
if (!FindIndex(date.Date, out index)) {
|
|
dateList.Insert(index, date.Date);
|
|
}
|
|
}
|
|
|
|
|
|
/// <devdoc>
|
|
/// <para>Removes all <see cref='System.DateTime'/> controls from the collection.</para>
|
|
/// </devdoc>
|
|
public void Clear() {
|
|
dateList.Clear();
|
|
}
|
|
|
|
|
|
/// <devdoc>
|
|
/// <para>Returns a value indicating whether the collection contains the specified
|
|
/// date.</para>
|
|
/// </devdoc>
|
|
public bool Contains(DateTime date) {
|
|
int index;
|
|
return FindIndex(date.Date, out index);
|
|
}
|
|
|
|
|
|
/// <devdoc>
|
|
/// </devdoc>
|
|
private bool FindIndex(DateTime date, out int index) {
|
|
int n = Count;
|
|
int Min = 0;
|
|
int Max = n;
|
|
while (Min < Max) {
|
|
index = (Min + Max ) / 2;
|
|
if (date == this[index]) {
|
|
return true;
|
|
}
|
|
if (date < this[index]) {
|
|
Max = index;
|
|
}
|
|
else {
|
|
Min = index + 1;
|
|
}
|
|
}
|
|
index = Min;
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
/// <devdoc>
|
|
/// <para>Returns an enumerator of all <see cref='System.DateTime' qualify='true'/> controls within the collection.</para>
|
|
/// </devdoc>
|
|
public IEnumerator GetEnumerator() {
|
|
return dateList.GetEnumerator();
|
|
}
|
|
|
|
|
|
/// <devdoc>
|
|
/// <para>Copies contents from the collection to a specified <see cref='System.Array' qualify='true'/> with a
|
|
/// specified starting index.</para>
|
|
/// </devdoc>
|
|
public void CopyTo(Array array, int index) {
|
|
for (IEnumerator e = this.GetEnumerator(); e.MoveNext();)
|
|
array.SetValue(e.Current, index++);
|
|
}
|
|
|
|
|
|
/// <devdoc>
|
|
/// <para>Gets the object that can be used to synchronize access to the collection. In
|
|
/// this case, it is the collection itself.</para>
|
|
/// </devdoc>
|
|
public Object SyncRoot {
|
|
get { return this;}
|
|
}
|
|
|
|
|
|
/// <devdoc>
|
|
/// <para>Gets a value indicating whether the collection is read-only.</para>
|
|
/// </devdoc>
|
|
public bool IsReadOnly {
|
|
get { return false;}
|
|
}
|
|
|
|
|
|
/// <devdoc>
|
|
/// <para>Gets a value indicating whether access to the collection is synchronized
|
|
/// (thread-safe).</para>
|
|
/// </devdoc>
|
|
public bool IsSynchronized {
|
|
get { return false;}
|
|
}
|
|
|
|
|
|
|
|
/// <devdoc>
|
|
/// <para>Removes the specified date from the collection.</para>
|
|
/// </devdoc>
|
|
public void Remove(DateTime date) {
|
|
int index;
|
|
if (FindIndex(date.Date, out index)) {
|
|
dateList.RemoveAt(index);
|
|
}
|
|
}
|
|
|
|
|
|
/// <devdoc>
|
|
/// <para>Sets the contents of the <see cref='System.Web.UI.WebControls.SelectedDatesCollection'/> to span
|
|
/// across the specified date range.</para>
|
|
/// </devdoc>
|
|
public void SelectRange(DateTime fromDate, DateTime toDate) {
|
|
dateList.Clear();
|
|
if (fromDate <= toDate) {
|
|
// The while loop below is safe that it is not attempting to add
|
|
// day beyond the last supported date because toDate can happen
|
|
// to be the last supported date.
|
|
dateList.Add(fromDate);
|
|
DateTime date = fromDate;
|
|
while (date < toDate) {
|
|
date = date.AddDays(1);
|
|
dateList.Add(date);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|