/// <summary>
		/// Draw the specified canvas and rect.
		/// </summary>
		/// <param name="canvas">Canvas.</param>
		/// <param name="rect">Rect.</param>
		public override void Draw (NGraphics.ICanvas canvas, NGraphics.Rect rect)
		{
			base.Draw (canvas, rect);

			if (PageCount <= 0)
				return;
			
			var dotWidth = rect.Height - 16;
			var spacing = dotWidth;
			var totalWidthNeeded = (PageCount * (dotWidth + spacing)) - dotWidth;

			// Draw dots
			double midx = rect.Width / 2;
			double midy = rect.Height / 2;

			var x = midx - (totalWidthNeeded / 2);
			var pen = new NGraphics.Pen (IndicatorColor.ToNColor (), 0.5);
			var brush = new NGraphics.SolidBrush (IndicatorColor.ToNColor ()); 
			for (int i = 0; i < PageCount; i++) {

				canvas.DrawEllipse (new NGraphics.Rect (x, midy - (dotWidth / 2), 
					dotWidth, dotWidth), pen, i==Page ? brush : null);

				x += dotWidth + spacing;
			}

		}
Beispiel #2
0
        /// <summary>
        /// Draw the specified canvas and rect.
        /// </summary>
        /// <param name="canvas">Canvas.</param>
        /// <param name="rect">Rect.</param>
        public override void Draw(NGraphics.ICanvas canvas, NGraphics.Rect rect)
        {
            base.Draw(canvas, rect);

            if (PageCount <= 0)
            {
                return;
            }

            var dotWidth         = rect.Height - 16;
            var spacing          = dotWidth;
            var totalWidthNeeded = (PageCount * (dotWidth + spacing)) - dotWidth;

            // Draw dots
            double midx = rect.Width / 2;
            double midy = rect.Height / 2;

            var x     = midx - (totalWidthNeeded / 2);
            var pen   = new NGraphics.Pen(IndicatorColor.ToNColor(), 0.5);
            var brush = new NGraphics.SolidBrush(IndicatorColor.ToNColor());

            for (int i = 0; i < PageCount; i++)
            {
                canvas.DrawEllipse(new NGraphics.Rect(x, midy - (dotWidth / 2),
                                                      dotWidth, dotWidth), pen, i == Page ? brush : null);

                x += dotWidth + spacing;
            }
        }
		/// <summary>
		/// Draw the specified canvas.
		/// </summary>
		/// <param name="canvas">Canvas.</param>
		/// <param name="rect">Rect.</param>
		public void DrawCalendar (NGraphics.ICanvas canvas, NGraphics.Rect rect)
		{
            _monthYearLabel.Text = _currentMonth.ToString("MMMMM yyyy");

            base.Draw (canvas, rect);

			// Should we use last line?
			// var drawLastLine = true;

			var colWidth = rect.Width/7;
			var rowHeight = rect.Height/6;
            var hasEmptyRow = false;

			// Find first week of day
			var firstWeekDay = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
            var date = _currentMonth;
            while (date.DayOfWeek != firstWeekDay)
            {
                date = date.AddDays(-1);
            }
            _firstDate = date;

			// Set up brushes
			var selectedBrush = new NGraphics.SolidBrush(SelectedBackground.ToNColor());
            var regularBrush = new NGraphics.SolidBrush(RegularBackground.ToNColor());
            var weekendBrush = new NGraphics.SolidBrush(WeekendBackground.ToNColor());
            var notInMonthBrush = new NGraphics.SolidBrush(NotInMonthBackground.ToNColor());
            var disabledBrush = new NGraphics.SolidBrush(DisabledBackground.ToNColor());

			var col = 0;
			var row = 0;

			for (int d = 0; d < _dayNumberLabels.Length; d++) {

				// Update text
                var label = _dayNumberLabels[d];
                if (hasEmptyRow || (date.DayOfWeek == firstWeekDay && date >= _currentMonth.AddMonths(1)))
                {
                    hasEmptyRow = true;
                    label.IsVisible = false;
                }
                else
                {
                    label.IsVisible = true;
                    label.Text = date.Day.ToString();
                    _lastDate = date;

                    if (HighlightDisabled && (date < MinDate - MinDate.TimeOfDay || date > MaxDate))
                    {
                        _dayNumberLabels[d].TextColor = DisabledColor;
                        canvas.DrawRectangle (new NGraphics.Rect (col * colWidth, row * rowHeight,
                            colWidth, rowHeight), null, disabledBrush);
                    }
                    else if (IsSameDay (SelectedDate, date))
                    {
                        // Selected date
                        _dayNumberLabels[d].TextColor = SelectedColor;
                        canvas.DrawRectangle (new NGraphics.Rect (col * colWidth, row * rowHeight,
                            colWidth, rowHeight), null, selectedBrush);
                    }
                    else if (date.Month != _currentMonth.Month)
                    {
                        // Prev/next month
                        _dayNumberLabels[d].TextColor = NotInMonthColor;
                        canvas.DrawRectangle(new NGraphics.Rect(col * colWidth, row * rowHeight, colWidth, rowHeight), null, notInMonthBrush);
                    }
                    else if (date.DayOfWeek == DayOfWeek.Sunday || date.DayOfWeek == DayOfWeek.Saturday)
                    {
                        // Weekends
                        _dayNumberLabels[d].TextColor = WeekendColor;
                        canvas.DrawRectangle(new NGraphics.Rect(col * colWidth, row * rowHeight, colWidth, rowHeight), null, weekendBrush);
                    }
                    else
                    {
                        // Regular days
                        _dayNumberLabels [d].TextColor = RegularColor; 
                        canvas.DrawRectangle (new NGraphics.Rect (col * colWidth, row * rowHeight, colWidth, rowHeight), null, regularBrush);
                    }


                    if (IsSameDay (DateTime.Now, date)) {

                        // Today
                        _dayNumberLabels[d].TextColor = TodayColor;

                        // Background
                        var wh = Math.Min(colWidth, rowHeight);
                        var dx = (colWidth - wh) / 2;
                        var dy = (rowHeight - wh) / 2;
                        var rc = new NGraphics.Rect ((col * colWidth) + dx, (row * rowHeight) + dy, wh, wh);
                        rc.Inflate (-1, -1);       

                        canvas.DrawEllipse (rc, null, new NGraphics.SolidBrush(TodayBackground.ToNColor()));
                    }
                }

				// Col/row-counter
				col++;
				if (col == 7) {
					col = 0;
					row++;
				}

                date = date.AddDays(1);
			}

            var colRowPen = new NGraphics.Pen(GridColor.ToNColor (), 1);

			// Draw row lines
            for (var r = 0; r < (hasEmptyRow ? 6 : 7) ; r++) {
				canvas.DrawPath (new NGraphics.PathOp[] {
					new NGraphics.MoveTo(0, r *rowHeight), 
					new NGraphics.LineTo(rect.Width, r*rowHeight) 
				}, colRowPen);
			}

			// Draw col lines
			for (var c = 0; c < 7; c++) {
				canvas.DrawPath (new NGraphics.PathOp[] {
					new NGraphics.MoveTo(c*colWidth, 0), 
                    new NGraphics.LineTo(c*colWidth, hasEmptyRow ? rect.Height - rowHeight : rect.Height)

				}, colRowPen);
			}	

		}
        /// <summary>
        /// Draw the specified canvas.
        /// </summary>
        /// <param name="canvas">Canvas.</param>
        /// <param name="rect">Rect.</param>
        public void DrawCalendar(NGraphics.ICanvas canvas, NGraphics.Rect rect)
        {
            _monthYearLabel.Text = _currentMonth.ToString("MMMMM yyyy");

            base.Draw(canvas, rect);

            // Should we use last line?
            // var drawLastLine = true;

            var colWidth    = rect.Width / 7;
            var rowHeight   = rect.Height / 6;
            var hasEmptyRow = false;

            // Find first week of day
            var firstWeekDay = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
            var date         = _currentMonth;

            while (date.DayOfWeek != firstWeekDay)
            {
                date = date.AddDays(-1);
            }
            _firstDate = date;

            // Set up brushes
            var selectedBrush   = new NGraphics.SolidBrush(SelectedBackground.ToNColor());
            var regularBrush    = new NGraphics.SolidBrush(RegularBackground.ToNColor());
            var weekendBrush    = new NGraphics.SolidBrush(WeekendBackground.ToNColor());
            var notInMonthBrush = new NGraphics.SolidBrush(NotInMonthBackground.ToNColor());
            var disabledBrush   = new NGraphics.SolidBrush(DisabledBackground.ToNColor());

            var col = 0;
            var row = 0;

            for (int d = 0; d < _dayNumberLabels.Length; d++)
            {
                // Update text
                var label = _dayNumberLabels[d];
                label.XAlign = TextAlignment.Center;
                label.YAlign = TextAlignment.Center;

                if (hasEmptyRow || (date.DayOfWeek == firstWeekDay && date >= _currentMonth.AddMonths(1)))
                {
                    hasEmptyRow     = true;
                    label.IsVisible = false;
                }
                else
                {
                    label.IsVisible = true;
                    label.Text      = date.Day.ToString();
                    _lastDate       = date;

                    if (HighlightDisabled && (date < MinDate - MinDate.TimeOfDay || date > MaxDate))
                    {
                        _dayNumberLabels[d].TextColor = DisabledColor;
                        canvas.DrawRectangle(new NGraphics.Rect(col * colWidth, row * rowHeight,
                                                                colWidth, rowHeight), null, disabledBrush);
                    }
                    else if (IsSameDay(SelectedDate, date))
                    {
                        // Selected date
                        _dayNumberLabels[d].TextColor = SelectedColor;
                        canvas.DrawRectangle(new NGraphics.Rect(col * colWidth, row * rowHeight,
                                                                colWidth, rowHeight), null, selectedBrush);
                    }
                    else if (date.Month != _currentMonth.Month)
                    {
                        // Prev/next month
                        _dayNumberLabels[d].TextColor = NotInMonthColor;
                        canvas.DrawRectangle(new NGraphics.Rect(col * colWidth, row * rowHeight, colWidth, rowHeight), null, notInMonthBrush);
                    }
                    else if (date.DayOfWeek == DayOfWeek.Sunday || date.DayOfWeek == DayOfWeek.Saturday)
                    {
                        // Weekends
                        _dayNumberLabels[d].TextColor = WeekendColor;
                        canvas.DrawRectangle(new NGraphics.Rect(col * colWidth, row * rowHeight, colWidth, rowHeight), null, weekendBrush);
                    }
                    else
                    {
                        // Regular days
                        _dayNumberLabels [d].TextColor = RegularColor;
                        canvas.DrawRectangle(new NGraphics.Rect(col * colWidth, row * rowHeight, colWidth, rowHeight), null, regularBrush);
                    }


                    if (IsSameDay(DateTime.Now, date))
                    {
                        // Today

                        // Background and color if not selected
                        if (!IsSameDay(SelectedDate, date))
                        {
                            _dayNumberLabels[d].TextColor = TodayColor;

                            var wh = Math.Min(colWidth, rowHeight);
                            var dx = (colWidth - wh) / 2;
                            var dy = (rowHeight - wh) / 2;
                            var rc = new NGraphics.Rect((col * colWidth) + dx, (row * rowHeight) + dy, wh, wh);
                            rc.Inflate(-1, -1);

                            canvas.DrawEllipse(rc, null, new NGraphics.SolidBrush(TodayBackground.ToNColor()));
                        }
                        else
                        {
                            _dayNumberLabels[d].TextColor = TodayBackground;
                        }
                    }
                }

                // Col/row-counter
                col++;
                if (col == 7)
                {
                    col = 0;
                    row++;
                }

                date = date.AddDays(1);
            }

            var colRowPen = new NGraphics.Pen(GridColor.ToNColor(), 1);

            // Draw row lines
            for (var r = 0; r < (hasEmptyRow ? 6 : 7); r++)
            {
                canvas.DrawPath(new NGraphics.PathOp[] {
                    new NGraphics.MoveTo(0, r * rowHeight),
                    new NGraphics.LineTo(rect.Width, r * rowHeight)
                }, colRowPen);
            }

            // Draw col lines
            for (var c = 0; c < 7; c++)
            {
                canvas.DrawPath(new NGraphics.PathOp[] {
                    new NGraphics.MoveTo(c * colWidth, 0),
                    new NGraphics.LineTo(c * colWidth, hasEmptyRow ? rect.Height - rowHeight : rect.Height)
                }, colRowPen);
            }
        }
		/// <summary>
		/// Draw the specified canvas.
		/// </summary>
		/// <param name="canvas">Canvas.</param>
		/// <param name="rect">Rect.</param>
		public void DrawCalendar (NGraphics.ICanvas canvas, NGraphics.Rect rect)
		{
			base.Draw (canvas, rect);

			// Should we use last line?
			// var drawLastLine = true;

			var colWidth = rect.Width/7;
			var rowHeight = rect.Height/6;

			// Find first week of day
			var firstWeekDay = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;

			// Find last of this day in previous month
			var lastDayInPrevMonth = GetLastDayInMonth(SelectedDate.AddMonths(-1));
			while (lastDayInPrevMonth.DayOfWeek != firstWeekDay)
				lastDayInPrevMonth = lastDayInPrevMonth.AddDays (-1);

			// Set up brushes
			var selectedBrush = new NGraphics.SolidBrush(SelectedDateColor.ToNColor());
			var prevNextBrush = new NGraphics.SolidBrush(Color.FromHex("#EEEEEE").ToNColor());

			var currentDate = lastDayInPrevMonth;
			StartDate = lastDayInPrevMonth;

			var col = 0;
			var row = 0;

			for (int d = 0; d < _dayNumberLabels.Length; d++) {

				// Update text
				_dayNumberLabels [d].Text = currentDate.Day.ToString();

				if (currentDate.Month != SelectedDate.Month) {

					// Prev/next month
					_dayNumberLabels [d].TextColor = Color.FromHex ("#CECECE");

				} 
				else 
				{

					// Background
					canvas.DrawRectangle (new NGraphics.Rect (col * colWidth, row * rowHeight,
						colWidth, rowHeight), null, prevNextBrush);
					
					if (currentDate.DayOfWeek == DayOfWeek.Sunday ||
					    currentDate.DayOfWeek == DayOfWeek.Saturday) {

						// Weekends
						_dayNumberLabels [d].TextColor = Color.FromHex ("#CACACA");

					} else {
					
						// Regular days
						_dayNumberLabels [d].TextColor = Color.Black;
					}
				}


				if (IsSameDay (DateTime.Now, currentDate)) {

					// Today
					_dayNumberLabels[d].TextColor = Color.White;

					// Background
					var wh = Math.Min(colWidth, rowHeight);
					var rc = new NGraphics.Rect ((col * colWidth), (row * rowHeight), wh, wh);
					rc.Inflate (-2, -2);
					rc.X++;
					rc.Y++;

					canvas.DrawEllipse (rc, null, new NGraphics.SolidBrush(Color.FromHex("#fc3d39").ToNColor()));
				}

				if (IsSameDay (SelectedDate, currentDate)) {
					
					// Selected colors
					_dayNumberLabels[d].TextColor = Color.White;

					// Background
					canvas.DrawRectangle (new NGraphics.Rect (col * colWidth, row * rowHeight,
						colWidth, rowHeight), null, selectedBrush);
				}
					
				// Col/row-counter
				col++;
				if (col == 7) {
					col = 0;
					row++;
				}

				currentDate = currentDate.AddDays (1);
			}

			var colRowPen = new NGraphics.Pen (Color.FromHex ("#FFFFFF").ToNColor (), 1);

			// Draw row lines
			for (var r = 0; r < 7; r++) {
				canvas.DrawPath (new NGraphics.PathOp[] {
					new NGraphics.MoveTo(0, r *rowHeight), 
					new NGraphics.LineTo(rect.Width, r*rowHeight) 
				}, colRowPen);
			}

			// Draw col lines
			for (var c = 0; c < 7; c++) {
				canvas.DrawPath (new NGraphics.PathOp[] {
					new NGraphics.MoveTo(c*colWidth, 0), 
					new NGraphics.LineTo(c*colWidth, rect.Height)

				}, colRowPen);
			}	

		}
Beispiel #6
0
        /// <summary>
        /// Draw the specified canvas.
        /// </summary>
        /// <param name="canvas">Canvas.</param>
        /// <param name="rect">Rect.</param>
        public void DrawCalendar(NGraphics.ICanvas canvas, NGraphics.Rect rect)
        {
            base.Draw(canvas, rect);

            // Should we use last line?
            // var drawLastLine = true;

            var colWidth  = rect.Width / 7;
            var rowHeight = rect.Height / 6;

            // Find first week of day
            var firstWeekDay = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;

            // Find last of this day in previous month
            var lastDayInPrevMonth = GetLastDayInMonth(SelectedDate.AddMonths(-1));

            while (lastDayInPrevMonth.DayOfWeek != firstWeekDay)
            {
                lastDayInPrevMonth = lastDayInPrevMonth.AddDays(-1);
            }

            // Set up brushes
            var selectedBrush = new NGraphics.SolidBrush(SelectedDateColor.ToNColor());
            var prevNextBrush = new NGraphics.SolidBrush(Color.FromHex("#EEEEEE").ToNColor());

            var currentDate = lastDayInPrevMonth;

            StartDate = lastDayInPrevMonth;

            var col = 0;
            var row = 0;

            for (int d = 0; d < _dayNumberLabels.Length; d++)
            {
                // Update text
                _dayNumberLabels [d].Text = currentDate.Day.ToString();

                if (currentDate.Month != SelectedDate.Month)
                {
                    // Prev/next month
                    _dayNumberLabels [d].TextColor = Color.FromHex("#CECECE");
                }
                else
                {
                    // Background
                    canvas.DrawRectangle(new NGraphics.Rect(col * colWidth, row * rowHeight,
                                                            colWidth, rowHeight), null, prevNextBrush);

                    if (currentDate.DayOfWeek == DayOfWeek.Sunday ||
                        currentDate.DayOfWeek == DayOfWeek.Saturday)
                    {
                        // Weekends
                        _dayNumberLabels [d].TextColor = Color.FromHex("#CACACA");
                    }
                    else
                    {
                        // Regular days
                        _dayNumberLabels [d].TextColor = Color.Black;
                    }
                }


                if (IsSameDay(SelectedDate, currentDate))
                {
                    // Selected colors
                    _dayNumberLabels[d].TextColor = Color.White;

                    // Background
                    canvas.DrawRectangle(new NGraphics.Rect(col * colWidth, row * rowHeight,
                                                            colWidth, rowHeight), null, selectedBrush);
                }

                if (IsSameDay(DateTime.Now, currentDate))
                {
                    // Today
                    _dayNumberLabels[d].TextColor = Color.White;

                    // Background
                    var wh = Math.Min(colWidth, rowHeight);
                    var rc = new NGraphics.Rect((col * colWidth), (row * rowHeight), wh, wh);
                    rc.Inflate(-1, -1);
                    rc.X += 3;

                    canvas.DrawEllipse(rc, null, new NGraphics.SolidBrush(Color.FromHex("#fc3d39").ToNColor()));
                }

                // Col/row-counter
                col++;
                if (col == 7)
                {
                    col = 0;
                    row++;
                }

                currentDate = currentDate.AddDays(1);
            }

            var colRowPen = new NGraphics.Pen(Color.FromHex("#FFFFFF").ToNColor(), 1);

            // Draw row lines
            for (var r = 0; r < 7; r++)
            {
                canvas.DrawPath(new NGraphics.PathOp[] {
                    new NGraphics.MoveTo(0, r * rowHeight),
                    new NGraphics.LineTo(rect.Width, r * rowHeight)
                }, colRowPen);
            }

            // Draw col lines
            for (var c = 0; c < 7; c++)
            {
                canvas.DrawPath(new NGraphics.PathOp[] {
                    new NGraphics.MoveTo(c * colWidth, 0),
                    new NGraphics.LineTo(c * colWidth, rect.Height)
                }, colRowPen);
            }
        }