Example #1
0
		private void m_month_DayRender(object sender, NuGenDayRenderEventArgs e)
		{
			this.OnDayRender(e);
		}
Example #2
0
		internal void Draw(Graphics e)
		{

			int today = -1;
			string[] selectedDays;

			Brush bgBrush = new SolidBrush(Colors.BackColor1);
			Brush selBrush = new SolidBrush(Color.FromArgb(125, Colors.Selected.BackColor));
			Brush focusBrush = new SolidBrush(Color.FromArgb(125, Colors.Focus.BackColor));
			Pen todayPen = new Pen(Color.FromArgb(150, Calendar.TodayColor), 2);

			try
			{
				if (BackgroundImage != null)
					e.DrawImage(BackgroundImage, Rect);
				else
				{
					if (Colors.GradientMode != NuGenGradientMode.None)
						m_calendar.DrawGradient(e, m_rect, Colors.BackColor1, Colors.BackColor2, Colors.GradientMode);
					else
						e.FillRectangle(bgBrush, m_rect);
				}
				// Draw days

				for (int i = 0; i < 42; i++)
				{

					// only draw days that are visible...
					if ((m_days[i].Rectangle.Height > 0) && (m_days[i].Rectangle.Width > 0))
					{
						// Create new graphics object
						Graphics d = m_calendar.CreateGraphics();
						// Create bitmap..

						Bitmap bmp = new Bitmap(m_days[i].Rectangle.Width, m_days[i].Rectangle.Height, d);
						// link graphics object to bitmap
						d = Graphics.FromImage(bmp);
						NuGenDayRenderEventArgs args = new NuGenDayRenderEventArgs(d, m_days[i].Rectangle, m_days[i].Date, m_days[i].State);
						DayRender(this, args);
						if (!args.OwnerDraw)
						{
							// day is not user drawn
							m_days[i].UserDrawn = false;
							NuGenDateItem dayInfo = new NuGenDateItem();
							dayInfo.Calendar = m_calendar;
							NuGenDayQueryInfoEventArgs info = new NuGenDayQueryInfoEventArgs(dayInfo, m_days[i].Date, m_days[i].State);
							DayQueryInfo(this, info);
							if (!info.OwnerDraw)
								dayInfo = null;
							m_days[i].Draw(e, dayInfo);
							if (dayInfo != null)
								dayInfo.Dispose();
						}
						else
						{
							// Draw user rendered day
							m_days[i].UserDrawn = true;
							e.DrawImage(bmp, m_days[i].Rectangle);
						}

						// Check if day has focus and if focus should be drawn
						if ((m_days[i].State == NuGenDayState.Focus) && (m_calendar.ShowFocus))
						{
							e.FillRectangle(focusBrush, m_days[i].Rectangle);
							ControlPaint.DrawBorder(e, m_days[i].Rectangle, Colors.Focus.Border, BorderStyles.Focus);
						}

						if ((m_days[i].Date == DateTime.Today) && (!args.OwnerDraw))
							today = i;

						d.Dispose();
						bmp.Dispose();
					}
				}

				// check if date is "today" and if it should be marked..
				if ((m_calendar.ShowToday) && (today != -1) &&
					((m_calendar.ShowTrailingDates) || (m_days[today].Date.Month == m_calendar.ActiveMonth.Month)))
				{

					RectangleF dateRect = m_days[today].DateRegion[0].GetBounds(e);

					dateRect.Inflate(5, 5);
					e.DrawEllipse(todayPen, dateRect);


				}

				// Check if a selection exist

				selectedDays = DaysInSelection(NO_AREA);
				if (selectedDays.Length > 0)
				{
					// Check how many selection areas there are
					if (m_selArea.Count <= 1)
					{
						for (int i = 0; i < m_selArea.Count; i++)
						{
							NuGenCalendarSelectionArea area = (NuGenCalendarSelectionArea)m_selArea[i];
							if ((area.Begin != -1) && (area.End != -1))
							{
								// Get Coordinates for selection rectangle

								m_selRight = System.Math.Max(m_days[area.End].Rectangle.Right, m_days[area.Begin].Rectangle.Right);
								m_selLeft = System.Math.Min(m_days[area.End].Rectangle.Left, m_days[area.Begin].Rectangle.Left);
								m_selTop = System.Math.Min(m_days[area.End].Rectangle.Top, m_days[area.Begin].Rectangle.Top);
								m_selBottom = System.Math.Max(m_days[area.End].Rectangle.Bottom, m_days[area.Begin].Rectangle.Bottom);

								// Draw selection
								Rectangle selRect = new Rectangle(m_selLeft, m_selTop, m_selRight - m_selLeft, m_selBottom - m_selTop);
								e.FillRectangle(selBrush, selRect);
								ControlPaint.DrawBorder(e, selRect, Colors.Selected.Border, BorderStyles.Selected);
							}

						}
					}
					// Multiple selection areas, we dont use border so we 
					// draw each day individually to not overlap regions
					else
					{
						for (int i = 0; i < 42; i++)
						{
							if ((m_days[i].State == NuGenDayState.Selected) && (m_days[i].SelectionArea != -1))
							{
								e.FillRectangle(selBrush, m_days[i].Rectangle);
							}
						}
					}

				}
			}
			catch (Exception)
			{

			}

			bgBrush.Dispose();
			selBrush.Dispose();
			todayPen.Dispose();
			focusBrush.Dispose();
		}
Example #3
0
		/// <summary>
		/// Will bubble the <see cref="DayRender"/> event.
		/// </summary>
		/// <param name="e"></param>
		protected virtual void OnDayRender(NuGenDayRenderEventArgs e)
		{
			this.Initiator.InvokeEventHandlerT<NuGenDayRenderEventArgs>(_dayRender, e);
		}