You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			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);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |