159 lines
3.9 KiB
C#

#if FRAMEWORK20
using System;
using System.Drawing;
namespace DevComponents.DotNetBar.Schedule
{
public class DaysOfTheWeek
{
#region enums
public enum eDayType
{
Long, // Long text
Short, // Short text
Single,
None
}
#endregion
#region Private variables
private int _DayCount; // Count of days
private string[][] _DayText; // Days of the week text
private Size[][] _DaySize; // Days of the week measure
private bool _NeedsMeasured; // Text measure flag
#endregion
/// <summary>
/// Constructor
/// </summary>
public DaysOfTheWeek()
: this(DateHelper.GetFirstDayOfWeek(), 7)
{
}
/// <summary>
/// Constructor
/// </summary>
/// <param name="day">Day of the week</param>
/// <param name="count">Count of days</param>
public DaysOfTheWeek(DayOfWeek day, int count)
{
LoadDays(day, count);
}
#region Public properties
/// <summary>
/// Gets the DayText string arrays
/// </summary>
public string[][] DayText
{
get { return (_DayText); }
}
/// <summary>
/// Gets the DaySize Size arrays
/// </summary>
public Size[][] DaySize
{
get {return (_DaySize); }
}
/// <summary>
/// Day text NeedsMeasured flag
/// </summary>
public bool NeedsMeasured
{
get { return (_NeedsMeasured); }
set { _NeedsMeasured = value; }
}
#endregion
#region LoadDays
/// <summary>
/// Loads the DayText arrays
/// </summary>
/// <param name="day">Starting day of week</param>
/// <param name="count">Count of days</param>
public void LoadDays(DayOfWeek day, int count)
{
_DayCount = count;
// Allocate our Day text and Size arrays
_DayText = new string[3][];
_DaySize = new Size[3][];
for (int i = 0; i < 3; i++)
{
_DayText[i] = new string[count];
_DaySize[i] = new Size[count];
}
// Loop through each day of the week, getting
// the long and short text strings for the day
for (int i = 0; i < _DayCount; i++)
{
_DayText[0][i] =
ScheduleSettings.GetActiveCulture().DateTimeFormat.GetDayName(day);
_DayText[1][i] =
DateHelper.GetThreeLetterDayOfWeek(day);
_DayText[2][i] = _DayText[1][i].Substring(0, 1);
day = DateHelper.GetNextDay(day);
}
// Flag that the text will need to be measured
_NeedsMeasured = true;
}
#endregion
#region MeasureText
/// <summary>
/// Measures the day text
/// </summary>
/// <param name="g">Graphics</param>
/// <param name="font">Text font</param>
public void MeasureText(Graphics g, Font font)
{
// Calculate our header text threshold, if
// we haven't done so already
if (_NeedsMeasured == true)
{
for (int i = 0; i < _DayCount; i++)
{
_DaySize[0][i] =
TextDrawing.MeasureString(g, _DayText[0][i], font);
_DaySize[1][i] =
TextDrawing.MeasureString(g, _DayText[1][i], font);
_DaySize[2][i] =
TextDrawing.MeasureString(g, _DayText[2][i], font);
}
_NeedsMeasured = false;
}
}
#endregion
}
}
#endif