805 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			805 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| #if FRAMEWORK20
 | |
| using System;
 | |
| using System.Drawing;
 | |
| using System.Drawing.Drawing2D;
 | |
| using System.Globalization;
 | |
| using System.Text;
 | |
| using System.Text.RegularExpressions;
 | |
| using System.Windows.Forms;
 | |
| using DevComponents.DotNetBar.Rendering;
 | |
| using DevComponents.DotNetBar.TextMarkup;
 | |
| using DevComponents.Schedule.Model;
 | |
| 
 | |
| namespace DevComponents.DotNetBar.Schedule
 | |
| {
 | |
|     public class AppointmentView : CalendarItem
 | |
|     {
 | |
|         #region enums
 | |
| 
 | |
|         [Flags]
 | |
|         public enum eViewEnds          // View display ends
 | |
|         {
 | |
|             Complete = 0,
 | |
|             PartialLeft = 1,
 | |
|             PartialRight = 2
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Static variables
 | |
| 
 | |
|         static private AppointmentColor _appointmentColor = new AppointmentColor();
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Private variables
 | |
| 
 | |
|         private Font _Font;
 | |
|         private BaseView _BaseView;
 | |
|         private Appointment _Appointment;
 | |
|         private bool _IsTextClipped;
 | |
|         private int _BorderWidth;
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Constructor
 | |
|         /// </summary>
 | |
|         /// <param name="baseView"></param>
 | |
|         /// <param name="appointment"></param>
 | |
|         public AppointmentView(BaseView baseView, Appointment appointment)
 | |
|         {
 | |
|             _BaseView = baseView;
 | |
|             _Appointment = appointment;
 | |
| 
 | |
|             MouseUpNotification = true;
 | |
| 
 | |
|             StartTime = appointment.StartTime;
 | |
|             EndTime = appointment.EndTime;
 | |
|             ModelItem = appointment;
 | |
| 
 | |
|             IsRecurring = (appointment.IsRecurringInstance == true ||
 | |
|                 appointment.Recurrence != null);
 | |
| 
 | |
|             RootItem = (appointment.IsRecurringInstance == true) ?
 | |
|                 appointment.RootAppointment : appointment;
 | |
| 
 | |
|             StartTimeChanged += AppointmentView_StartTimeChanged;
 | |
|             EndTimeChanged += AppointmentView_EndTimeChanged;
 | |
|         }
 | |
| 
 | |
|         #region Public properties
 | |
| 
 | |
|         #region Appointment
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets and sets the view Appointment
 | |
|         /// </summary>
 | |
|         public Appointment Appointment
 | |
|         {
 | |
|             get { return (_Appointment); }
 | |
|             set { _Appointment = value; }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region AppointmentColor
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets and sets the appointment color
 | |
|         /// </summary>
 | |
|         public AppointmentColor AppointmentColor
 | |
|         {
 | |
|             get { return (_appointmentColor); }
 | |
|             set { _appointmentColor = value; }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region BorderWidth
 | |
| 
 | |
|         public int BorderWidth
 | |
|         {
 | |
|             get { return (_BorderWidth); }
 | |
| 
 | |
|             set
 | |
|             {
 | |
|                 if (_BorderWidth != value)
 | |
|                 {
 | |
|                     _BorderWidth = value;
 | |
| 
 | |
|                     Invalidate(_BaseView.CalendarView);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Font
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets and sets the view font
 | |
|         /// </summary>
 | |
|         public Font Font
 | |
|         {
 | |
|             get { return (_Font); }
 | |
|             set { _Font = value; }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region IsTextClipped
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets whether the Appointment display Text is clipped
 | |
|         /// </summary>
 | |
|         public bool IsTextClipped
 | |
|         {
 | |
|             get { return (_IsTextClipped); }
 | |
|             internal set { _IsTextClipped = value; }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Internal properties
 | |
| 
 | |
|         #region BaseView
 | |
| 
 | |
|         /// <summary>
 | |
|         /// BaseView
 | |
|         /// </summary>
 | |
|         internal BaseView BaseView
 | |
|         {
 | |
|             get { return (_BaseView); }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Image
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Image
 | |
|         /// </summary>
 | |
|         internal Image Image
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 if (string.IsNullOrEmpty(Appointment.ImageKey) == true)
 | |
|                     return (null);
 | |
| 
 | |
|                 ImageList images;
 | |
| 
 | |
|                 switch (_BaseView.CalendarView.ImageSize)
 | |
|                 {
 | |
|                     case eBarImageSize.Medium:
 | |
|                         images = _BaseView.CalendarView.ImagesMedium;
 | |
|                         break;
 | |
| 
 | |
|                     case eBarImageSize.Large:
 | |
|                         images = _BaseView.CalendarView.ImagesLarge;
 | |
|                         break;
 | |
| 
 | |
|                     default:
 | |
|                         images = _BaseView.CalendarView.Images;
 | |
|                         break;
 | |
|                 }
 | |
| 
 | |
|                 return (images != null ?
 | |
|                     images.Images[Appointment.ImageKey] : null);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Start/End TimeChanged event handling
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Handles StartTime value changes
 | |
|         /// </summary>
 | |
|         /// <param name="sender">CalendarItem</param>
 | |
|         /// <param name="e">EventArgs</param>
 | |
|         protected virtual void AppointmentView_StartTimeChanged(object sender, EventArgs e)
 | |
|         {
 | |
|             _Appointment.StartTime = StartTime;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Handles EndTime value changes
 | |
|         /// </summary>
 | |
|         /// <param name="sender">CalendarItem</param>
 | |
|         /// <param name="e">EventArgs</param>
 | |
|         protected virtual void AppointmentView_EndTimeChanged(object sender, EventArgs e)
 | |
|         {
 | |
|             _Appointment.EndTime = EndTime;
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region DisplayTemplateText
 | |
| 
 | |
|         /// <summary>
 | |
|         /// DisplayTemplateText
 | |
|         /// </summary>
 | |
|         /// <param name="e"></param>
 | |
|         /// <param name="r"></param>
 | |
|         /// <returns>true is displayed</returns>
 | |
|         internal bool DisplayTemplateText(ItemPaintArgs e, Rectangle r)
 | |
|         {
 | |
|             if (_BaseView.CalendarView.EnableMarkup == true)
 | |
|             {
 | |
|                 if (string.IsNullOrEmpty(Appointment.DisplayTemplate) == false)
 | |
|                 {
 | |
|                     Text = GetDisplayTemplateText(r);
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     string text = Appointment.Subject;
 | |
| 
 | |
|                     if (IsUsingTextMarkup)
 | |
|                     {
 | |
|                         if (Appointment.IsMultiDayOrAllDayEvent == false)
 | |
|                             text += "<br/>" + Appointment.Description;
 | |
|                     }
 | |
| 
 | |
|                     Text = text;
 | |
|                 }
 | |
| 
 | |
|                 if (IsUsingTextMarkup)
 | |
|                 {
 | |
|                     Graphics g = e.Graphics;
 | |
| 
 | |
|                     MarkupDrawContext d =
 | |
|                         new MarkupDrawContext(g, Font ?? e.Font, TextColor, true);
 | |
| 
 | |
|                     Size size = new Size(5000, 5000);
 | |
| 
 | |
|                     TextMarkupBodyMeasure(size, d);
 | |
| 
 | |
|                     d.RightToLeft = false;
 | |
| 
 | |
|                     r.Y += 3;
 | |
|                     r.Height -= 3;
 | |
| 
 | |
|                     TextMarkupBodyArrange(new Rectangle(r.Location, TextMarkupBodyBounds.Size), d);
 | |
| 
 | |
|                     _IsTextClipped = (TextMarkupBodyBounds.Size.Width > r.Width ||
 | |
|                         TextMarkupBodyBounds.Size.Height > r.Height);
 | |
| 
 | |
|                     Region oldClip = g.Clip;
 | |
|                     Rectangle clipRect = r;
 | |
| 
 | |
|                     g.SetClip(clipRect, CombineMode.Intersect);
 | |
| 
 | |
|                     TextMarkupBodyRender(d);
 | |
| 
 | |
|                     g.Clip = oldClip;
 | |
| 
 | |
|                     return (true);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             return (false);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region GetDisplayTemplateText
 | |
| 
 | |
|         /// <summary>
 | |
|         /// GetDisplayTemplateText
 | |
|         /// </summary>
 | |
|         /// <param name="r"></param>
 | |
|         /// <returns>Templatized text</returns>
 | |
|         private string GetDisplayTemplateText(Rectangle r)
 | |
|         {
 | |
|             string s = Appointment.DisplayTemplate;
 | |
| 
 | |
|             if (String.IsNullOrEmpty(s) == true)
 | |
|                 return (s);
 | |
| 
 | |
|             Regex reg = new Regex("\\[\\w+\\]");
 | |
|             MatchCollection mc = reg.Matches(s);
 | |
| 
 | |
|             int index = 0;
 | |
|             StringBuilder sb = new StringBuilder();
 | |
| 
 | |
|             sb.Append("<p width=\"" + r.Width.ToString() + "\">");
 | |
| 
 | |
|             for (int i = 0; i < mc.Count; i++)
 | |
|             {
 | |
|                 Match ma = mc[i];
 | |
| 
 | |
|                 if (ma.Index > index)
 | |
|                     sb.Append(s.Substring(index, ma.Index - index));
 | |
| 
 | |
|                 switch (ma.Value)
 | |
|                 {
 | |
|                     case "[StartTime]":
 | |
|                         sb.Append(Appointment.StartTime.ToString("t",
 | |
|                             _BaseView.CalendarView.Is24HourFormat ? DateTimeFormatInfo.InvariantInfo : null));
 | |
|                         break;
 | |
| 
 | |
|                     case "[StartDate]":
 | |
|                         sb.Append(Appointment.StartTime.ToShortDateString());
 | |
|                         break;
 | |
| 
 | |
|                     case "[EndTime]":
 | |
|                         sb.Append(Appointment.EndTime.ToString("t",
 | |
|                             _BaseView.CalendarView.Is24HourFormat ? DateTimeFormatInfo.InvariantInfo : null));
 | |
|                         break;
 | |
| 
 | |
|                     case "[EndDate]":
 | |
|                         sb.Append(Appointment.EndTime.ToShortDateString());
 | |
|                         break;
 | |
| 
 | |
|                     case "[Subject]":
 | |
|                         sb.Append(Appointment.Subject);
 | |
|                         break;
 | |
| 
 | |
|                     case "[Description]":
 | |
|                         sb.Append(Appointment.Description);
 | |
|                         break;
 | |
| 
 | |
|                     case "[Id]":
 | |
|                         sb.Append(Appointment.Id);
 | |
|                         break;
 | |
| 
 | |
|                     case "[Tag]":
 | |
|                         sb.Append(Appointment.Tag.ToString());
 | |
|                         break;
 | |
| 
 | |
|                     default:
 | |
|                         sb.Append(_BaseView.CalendarView.DoGetDisplayTemplateText(this, ma.Value, ma.Value));
 | |
|                         break;
 | |
|                 }
 | |
| 
 | |
|                 index = ma.Index + ma.Length;
 | |
|             }
 | |
| 
 | |
|             if (s.Length > index)
 | |
|                 sb.Append(s.Substring(index));
 | |
| 
 | |
|             sb.Append("</p>");
 | |
| 
 | |
|             return (sb.ToString());
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Paint
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Paint processing
 | |
|         /// </summary>
 | |
|         /// <param name="e">ItemPaintArgs</param>
 | |
|         public override void Paint(ItemPaintArgs e)
 | |
|         {
 | |
|         }
 | |
| 
 | |
|         #region GetItemBounds
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets the item text and image bounds
 | |
|         /// </summary>
 | |
|         /// <param name="r"></param>
 | |
|         /// <param name="rText"></param>
 | |
|         /// <param name="image"></param>
 | |
|         /// <returns></returns>
 | |
|         protected virtual Rectangle GetItemBounds(Rectangle r, ref Rectangle rText, Image image)
 | |
|         {
 | |
|             Rectangle ri = r;
 | |
| 
 | |
|             if (Image != null)
 | |
|             {
 | |
|                 const int vpad = 2;
 | |
|                 const int hpad = 3;
 | |
| 
 | |
|                 ri.Inflate(0, -vpad);
 | |
| 
 | |
|                 switch (Appointment.ImageAlign)
 | |
|                 {
 | |
|                     case eImageContentAlignment.TopLeft:
 | |
|                         rText.X += (image.Size.Width + hpad);
 | |
|                         rText.Width -= (image.Size.Width + hpad);
 | |
|                         break;
 | |
| 
 | |
|                     case eImageContentAlignment.TopRight:
 | |
|                         ri.X = rText.Right - image.Size.Width;
 | |
|                         rText.Width -= image.Size.Width;
 | |
|                         break;
 | |
| 
 | |
|                     case eImageContentAlignment.TopCenter:
 | |
|                         ri.X += (ri.Width - image.Size.Width) / 2;
 | |
|                         rText.Y += (image.Size.Height + hpad);
 | |
|                         rText.Height -= (image.Size.Height + hpad);
 | |
|                         break;
 | |
| 
 | |
|                     case eImageContentAlignment.MiddleLeft:
 | |
|                         ri.Y += (ri.Height - image.Size.Height) / 2;
 | |
|                         rText.X += (image.Size.Width + hpad);
 | |
|                         rText.Width -= (image.Size.Width + hpad);
 | |
|                         break;
 | |
| 
 | |
|                     case eImageContentAlignment.MiddleRight:
 | |
|                         ri.X = ri.Right - image.Size.Width;
 | |
|                         ri.Y += (ri.Height - image.Size.Height) / 2;
 | |
|                         rText.Width -= (image.Size.Width + hpad);
 | |
|                         break;
 | |
| 
 | |
|                     case eImageContentAlignment.MiddleCenter:
 | |
|                         ri.X = ri.X + (ri.Width - image.Size.Width) / 2;
 | |
|                         ri.Y += (ri.Height - image.Size.Height) / 2;
 | |
|                         break;
 | |
| 
 | |
|                     case eImageContentAlignment.BottomLeft:
 | |
|                         ri.Y = ri.Bottom - image.Size.Height;
 | |
|                         rText.X += (image.Size.Width + hpad);
 | |
|                         rText.Width -= (image.Size.Width + hpad);
 | |
|                         break;
 | |
| 
 | |
|                     case eImageContentAlignment.BottomRight:
 | |
|                         ri.X = ri.Right - image.Size.Width;
 | |
|                         ri.Y = ri.Bottom - image.Size.Height;
 | |
|                         rText.Width -= (image.Size.Width - hpad);
 | |
|                         break;
 | |
| 
 | |
|                     default:
 | |
|                         ri.X = ri.X + (ri.Width - image.Size.Width) / 2;
 | |
|                         ri.Y = ri.Bottom - image.Size.Height;
 | |
|                         break;
 | |
|                 }
 | |
| 
 | |
|                 ri.Size = image.Size;
 | |
| 
 | |
|                 if (ri.X < r.X)
 | |
|                     ri.X = r.X;
 | |
| 
 | |
|                 if (ri.Y < r.Y + vpad)
 | |
|                     ri.Y = r.Y + vpad;
 | |
|             }
 | |
| 
 | |
|             return (ri);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region DrawContentImage
 | |
| 
 | |
|         /// <summary>
 | |
|         /// DrawContentImage
 | |
|         /// </summary>
 | |
|         /// <param name="e"></param>
 | |
|         /// <param name="r"></param>
 | |
|         /// <param name="rImage"></param>
 | |
|         /// <param name="image"></param>
 | |
|         protected virtual void DrawContentImage(
 | |
|             ItemPaintArgs e, Rectangle r, Rectangle rImage, Image image)
 | |
|         {
 | |
|             if (image != null)
 | |
|             {
 | |
|                 Graphics g = e.Graphics;
 | |
| 
 | |
|                 rImage.Intersect(r);
 | |
|                 g.DrawImageUnscaledAndClipped(image, rImage);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region DrawTimeMarker
 | |
| 
 | |
|         #region DrawTimeMarker
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Initiates the drawing of the appointment Time Marker
 | |
|         /// </summary>
 | |
|         /// <param name="g">Graphics</param>
 | |
|         /// <param name="r">Appointment rectangle</param>
 | |
|         /// <param name="corner">Corner radius</param>
 | |
|         protected virtual void DrawTimeMarker(Graphics g, Rectangle r, int corner)
 | |
|         {
 | |
|             if (Appointment.TimeMarkedAs != null)
 | |
|             {
 | |
|                 if (Appointment.TimeMarkedAs.Equals(Appointment.TimerMarkerTentative))
 | |
|                 {
 | |
|                     using (HatchBrush br =
 | |
|                         new HatchBrush(HatchStyle.WideUpwardDiagonal, BorderColor, Color.White))
 | |
|                     {
 | |
|                         g.RenderingOrigin = new Point(r.X, r.Y);
 | |
| 
 | |
|                         RenderMarker(g, br, r, corner);
 | |
|                     }
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     using (Brush br = TimeMarkerBrush(r))
 | |
|                     {
 | |
|                         if (br != null)
 | |
|                             RenderMarker(g, br, r, corner);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region RenderMarker
 | |
| 
 | |
|         /// <summary>
 | |
|         /// RenderMarker
 | |
|         /// </summary>
 | |
|         /// <param name="g"></param>
 | |
|         /// <param name="br">Brush</param>
 | |
|         /// <param name="r">Rectangle</param>
 | |
|         /// <param name="corner">Corner</param>
 | |
|         private void RenderMarker(Graphics g, Brush br, Rectangle r, int corner)
 | |
|         {
 | |
|             using (Pen pen = BorderPen)
 | |
|             {
 | |
|                 if (corner > 0)
 | |
|                 {
 | |
|                     using (GraphicsPath path = GetLeftRoundedRectanglePath(r, corner))
 | |
|                     {
 | |
|                         g.FillPath(br, path);
 | |
|                         g.DrawPath(pen, path);
 | |
|                     }
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     int x = Math.Min(5, r.Height / 2);
 | |
|                     x = Math.Min(x, r.Width / 2);
 | |
| 
 | |
|                     r.Width = x;
 | |
| 
 | |
|                     g.FillRectangle(br, r);
 | |
|                     g.DrawRectangle(pen, r);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region GetLeftRoundedRectanglePath
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Creates a left rounded rectangle path to be
 | |
|         /// used for the Time Marker
 | |
|         /// </summary>
 | |
|         /// <param name="r">Appointment rectangle</param>
 | |
|         /// <param name="corner">Corner radius</param>
 | |
|         /// <returns>Graphics path</returns>
 | |
|         private GraphicsPath GetLeftRoundedRectanglePath(Rectangle r, int corner)
 | |
|         {
 | |
|             GraphicsPath path = new GraphicsPath();
 | |
| 
 | |
|             ElementStyleDisplay.AddCornerArc(path, r, corner, eCornerArc.TopLeft);
 | |
|             path.AddLine(r.X + corner, r.Y, r.X + corner, r.Bottom);
 | |
|             ElementStyleDisplay.AddCornerArc(path, r, corner, eCornerArc.BottomLeft);
 | |
| 
 | |
|             return (path);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Color support
 | |
| 
 | |
|         #region BackBrush
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets the appointment BackGround brush
 | |
|         /// </summary>
 | |
|         /// <param name="r">Bounding rectangle</param>
 | |
|         /// <returns></returns>
 | |
|         protected Brush BackBrush(Rectangle r)
 | |
|         {
 | |
|             string category = _Appointment.CategoryColor;
 | |
| 
 | |
|             if (category != null)
 | |
|             {
 | |
|                 // Check to see if we have any user defined
 | |
|                 // AppointmentCategoryColors
 | |
| 
 | |
|                 if (_BaseView.CalendarView.HasCategoryColors == true)
 | |
|                 {
 | |
|                     AppointmentCategoryColor acc =
 | |
|                         _BaseView.CalendarView.CategoryColors[category];
 | |
| 
 | |
|                     if (acc != null)
 | |
|                         return (_appointmentColor.BrushPart(acc.BackColor, r));
 | |
|                 }
 | |
| 
 | |
|                 // Just use the default color set
 | |
| 
 | |
|                 if (category.StartsWith("#") == true)
 | |
|                     return (new SolidBrush(ColorFactory.Empty.GetColor(category.Substring(1))));
 | |
| 
 | |
|                 if (category.Equals(Appointment.CategoryBlue))
 | |
|                     return (_appointmentColor.BrushPart((int)eAppointmentPart.BlueBackground, r));
 | |
| 
 | |
|                 if (category.Equals(Appointment.CategoryGreen))
 | |
|                     return (_appointmentColor.BrushPart((int)eAppointmentPart.GreenBackground, r));
 | |
| 
 | |
|                 if (category.Equals(Appointment.CategoryOrange))
 | |
|                     return (_appointmentColor.BrushPart((int)eAppointmentPart.OrangeBackground, r));
 | |
| 
 | |
|                 if (category.Equals(Appointment.CategoryPurple))
 | |
|                     return (_appointmentColor.BrushPart((int)eAppointmentPart.PurpleBackground, r));
 | |
| 
 | |
|                 if (category.Equals(Appointment.CategoryRed))
 | |
|                     return (_appointmentColor.BrushPart((int)eAppointmentPart.RedBackground, r));
 | |
| 
 | |
|                 if (category.Equals(Appointment.CategoryYellow))
 | |
|                     return (_appointmentColor.BrushPart((int)eAppointmentPart.YellowBackground, r));
 | |
|             }
 | |
| 
 | |
|             return (_appointmentColor.BrushPart((int)eAppointmentPart.DefaultBackground, r));
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region BorderColor
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets the border color for the Category
 | |
|         /// </summary>
 | |
|         protected Color BorderColor
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 string category = _Appointment.CategoryColor;
 | |
| 
 | |
|                 if (category != null)
 | |
|                 {
 | |
|                     // Check to see if we have any user defined
 | |
|                     // AppointmentCategoryColors
 | |
| 
 | |
|                     if (_BaseView.CalendarView.HasCategoryColors == true)
 | |
|                     {
 | |
|                         AppointmentCategoryColor acc =
 | |
|                             _BaseView.CalendarView.CategoryColors[category];
 | |
| 
 | |
|                         if (acc != null)
 | |
|                             return (acc.BorderColor);
 | |
|                     }
 | |
| 
 | |
|                     // Just use the default color set
 | |
| 
 | |
|                     if (category.Equals(Appointment.CategoryBlue))
 | |
|                         return (_appointmentColor.GetColor((int)eAppointmentPart.BlueBorder));
 | |
| 
 | |
|                     if (category.Equals(Appointment.CategoryGreen))
 | |
|                         return (_appointmentColor.GetColor((int)eAppointmentPart.GreenBorder));
 | |
| 
 | |
|                     if (category.Equals(Appointment.CategoryOrange))
 | |
|                         return (_appointmentColor.GetColor((int)eAppointmentPart.OrangeBorder));
 | |
| 
 | |
|                     if (category.Equals(Appointment.CategoryPurple))
 | |
|                         return (_appointmentColor.GetColor((int)eAppointmentPart.PurpleBorder));
 | |
| 
 | |
|                     if (category.Equals(Appointment.CategoryRed))
 | |
|                         return (_appointmentColor.GetColor((int)eAppointmentPart.RedBorder));
 | |
| 
 | |
|                     if (category.Equals(Appointment.CategoryYellow))
 | |
|                         return (_appointmentColor.GetColor((int)eAppointmentPart.YellowBorder));
 | |
|                 }
 | |
| 
 | |
|                 return (_appointmentColor.GetColor((int)eAppointmentPart.DefaultBorder));
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region BorderPen
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets the border pen
 | |
|         /// </summary>
 | |
|         protected Pen BorderPen
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 int n = (_BorderWidth > 0) ?
 | |
|                     _BorderWidth : _BaseView.CalendarView.AppointmentBorderWidth;
 | |
| 
 | |
|                 return (new Pen(BorderColor, n));
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region SelectedBorderPen
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets the selected border pen
 | |
|         /// </summary>
 | |
|         protected Pen SelectedBorderPen
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 int n = (_BorderWidth > 0) ?
 | |
|                     _BorderWidth : _BaseView.CalendarView.AppointmentBorderWidth;
 | |
| 
 | |
|                 return (new Pen(Color.Black, n + 1));
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region TextColor
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets the Text color for the Category
 | |
|         /// </summary>
 | |
|         protected Color TextColor
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 string category = _Appointment.CategoryColor;
 | |
| 
 | |
|                 // Check to see if we have any user defined
 | |
|                 // AppointmentCategoryColors
 | |
| 
 | |
|                 if (category != null)
 | |
|                 {
 | |
|                     if (_BaseView.CalendarView.HasCategoryColors == true)
 | |
|                     {
 | |
|                         AppointmentCategoryColor acc =
 | |
|                             _BaseView.CalendarView.CategoryColors[category];
 | |
| 
 | |
|                         if (acc != null)
 | |
|                             return (acc.TextColor);
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 return (Color.Black);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region TimeMarkerBrush
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets the appointment TimeMarkerBrush
 | |
|         /// </summary>
 | |
|         /// <param name="r">Bounding rectangle</param>
 | |
|         /// <returns></returns>
 | |
|         protected Brush TimeMarkerBrush(Rectangle r)
 | |
|         {
 | |
|             string timeMarkedAs = _Appointment.TimeMarkedAs;
 | |
| 
 | |
|             if (timeMarkedAs != null)
 | |
|             {
 | |
|                 if (timeMarkedAs.StartsWith("#") == true)
 | |
|                     return (new SolidBrush(ColorFactory.Empty.GetColor(timeMarkedAs.Substring(1))));
 | |
| 
 | |
|                 if (timeMarkedAs.Equals(Appointment.TimerMarkerFree))
 | |
|                     return (_appointmentColor.BrushPart((int)eAppointmentPart.FreeTimeMarker, r));
 | |
| 
 | |
|                 if (timeMarkedAs.Equals(Appointment.TimerMarkerBusy))
 | |
|                     return (_appointmentColor.BrushPart((int)eAppointmentPart.BusyTimeMarker, r));
 | |
| 
 | |
|                 if (timeMarkedAs.Equals(Appointment.TimerMarkerOutOfOffice))
 | |
|                     return (_appointmentColor.BrushPart((int)eAppointmentPart.OutOfOfficeTimeMarker, r));
 | |
|             }
 | |
| 
 | |
|             return (null);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|     }
 | |
| }
 | |
| #endif
 | |
| 
 |