217 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			217 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| #if FRAMEWORK20
 | |
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Drawing;
 | |
| 
 | |
| namespace DevComponents.DotNetBar.Schedule
 | |
| {
 | |
|     public class MonthWeek
 | |
|     {
 | |
|         #region Private constants
 | |
| 
 | |
|         private const int DaysInWeek = 7;
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Private variables
 | |
| 
 | |
|         private DateTime _FirstDayOfWeek;   // First day of the week
 | |
|         private DateTime _LastDayOfWeek;    // Last day of the week
 | |
| 
 | |
|         private Rectangle _Bounds;          // Week bounding rectangle
 | |
|         private ItemRects _DayRects;        // Day bounding Rectangles
 | |
|         private ItemRects _MoreItems;
 | |
| 
 | |
|         private List<CalendarItem> 
 | |
|             _CalendarItems = new List<CalendarItem>();
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Constructor
 | |
|         /// </summary>
 | |
|         /// <param name="baseItem"></param>
 | |
|         public MonthWeek(BaseItem baseItem)
 | |
|         {
 | |
|             // Allocate our DayRects array
 | |
| 
 | |
|             _DayRects = new ItemRects(baseItem, DaysInWeek);
 | |
|             _MoreItems = new ItemRects(baseItem, DaysInWeek);
 | |
|         }
 | |
| 
 | |
|         #region Public properties
 | |
| 
 | |
|         #region CalendarItems
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets array of CalendarItems
 | |
|         /// </summary>
 | |
|         public List<CalendarItem> CalendarItems
 | |
|         {
 | |
|             get { return (_CalendarItems); }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region FirstDayOfWeek
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets the first day of the week
 | |
|         /// </summary>
 | |
|         public DateTime FirstDayOfWeek
 | |
|         {
 | |
|             get { return (_FirstDayOfWeek); }
 | |
| 
 | |
|             internal set
 | |
|             {
 | |
|                 _FirstDayOfWeek = value;
 | |
| 
 | |
|                 _LastDayOfWeek = _FirstDayOfWeek.AddDays(DaysInWeek - 1);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Internal properties
 | |
| 
 | |
|         #region Bounds
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets and sets the week bounding Rectangle
 | |
|         /// </summary>
 | |
|         internal Rectangle Bounds
 | |
|         {
 | |
|             get { return (_Bounds); }
 | |
| 
 | |
|             set
 | |
|             {
 | |
|                 if (_Bounds.Equals(value) == false)
 | |
|                 {
 | |
|                     _Bounds = value;
 | |
| 
 | |
|                     CalcDayRects();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region DayRects
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets the day Rectangles
 | |
|         /// </summary>
 | |
|         internal ItemRects DayRects
 | |
|         {
 | |
|             get { return (_DayRects); }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region LastDayOfWeek
 | |
| 
 | |
|         internal DateTime LastDayOfWeek
 | |
|         {
 | |
|             get { return (_LastDayOfWeek); }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region MoreItems
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets the MoreItems
 | |
|         /// </summary>
 | |
|         internal ItemRects MoreItems
 | |
|         {
 | |
|             get { return (_MoreItems); }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region WeekRange
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets the week day range text
 | |
|         /// </summary>
 | |
|         internal string WeekRange
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 string s1 = String.Format("{0:MMM} {1:d} - ",
 | |
|                     _FirstDayOfWeek, _FirstDayOfWeek.Day);
 | |
| 
 | |
|                 if (_FirstDayOfWeek.Month.Equals(_LastDayOfWeek.Month) == false)
 | |
|                     s1 = s1 + String.Format("{0:MMM} ", _LastDayOfWeek);
 | |
| 
 | |
|                 s1 = s1 + String.Format("{0:d}", _LastDayOfWeek.Day);
 | |
| 
 | |
|                 return (s1);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Private properties
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets day height
 | |
|         /// </summary>
 | |
|         private int DayHeight
 | |
|         {
 | |
|             get { return (_Bounds.Height); }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets day width
 | |
|         /// </summary>
 | |
|         private float DayWidth
 | |
|         {
 | |
|             get { return ((float)_Bounds.Width / DaysInWeek); }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region DayRect calculation
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Calculates the day rectangles for the
 | |
|         /// current bounding rectangle
 | |
|         /// </summary>
 | |
|         private void CalcDayRects()
 | |
|         {
 | |
|             float dx = 0;
 | |
| 
 | |
|             int sx = _Bounds.X;
 | |
|             int sy = _Bounds.Y;
 | |
| 
 | |
|             int x2 = sx;
 | |
| 
 | |
|             // Loop through each day in the week
 | |
| 
 | |
|             for (int i = 0; i < DaysInWeek; i++)
 | |
|             {
 | |
|                 int x1 = x2;
 | |
| 
 | |
|                 x2 = sx + (int)(dx + DayWidth);
 | |
| 
 | |
|                 dx += DayWidth;
 | |
| 
 | |
|                 if (i + 1 == DaysInWeek)
 | |
|                     x2 = _Bounds.X + _Bounds.Width;
 | |
| 
 | |
|                 _DayRects[i].Bounds =
 | |
|                     new Rectangle(x1, sy, x2 - x1, DayHeight);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
|     }
 | |
| }
 | |
| #endif
 | |
| 
 |