protected override void DrawPageOnSurface(int page, DockySurface surface) { DateTime[] months = new DateTime[3]; months [0] = months [1] = months [2] = CalendarStartDate; switch (page) { default: case 0: months [2] = CalendarStartDate.AddMonths(-1); months [1] = CalendarStartDate.AddMonths(1); break; case 1: months [0] = CalendarStartDate.AddMonths(-1); months [2] = CalendarStartDate.AddMonths(1); break; case 2: months [1] = CalendarStartDate.AddMonths(-1); months [0] = CalendarStartDate.AddMonths(1); break; } DrawMonth(surface.Context, months [page]); }
public void IncrementWeeks(int weekCount) { var startDate = CalendarStartDate.AddWeeks(weekCount); var endDate = startDate.AddWeeks(TimesheetsCalendarViewModel.WeekCount).AddDays(-1); var maxEndDate = DateTime.Today.ToNextDay(DayOfWeek.Sunday); if (endDate <= maxEndDate) { CalendarStartDate = startDate; SearchTimesheets(); } }
public void Refresh() { RefreshDateRange(CalendarStartDate, CalendarStartDate.AddWeeks(TimesheetsCalendarViewModel.WeekCount), onComplete: () => { if (TimesheetDayViewModel != null) { TimesheetDayViewModel.RefreshData(); } else { CalendarSelectedDate = DateTime.Today; } }); }
public void SearchTimesheets() { var predicates = new List <Func <TimesheetSearchResult, bool> >(); if (!string.IsNullOrEmpty(FilterTimesheets)) { var data = FilterTimesheets.ToLower().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); for (var i = 0; i < data.Length; i++) { var dataItem = data[i]; predicates.Add(x => (x.TaskNumber ?? string.Empty).ToLower().Contains(dataItem) || (x.Description ?? string.Empty).ToLower().Contains(dataItem)); } } if (CalendarMode) { var startDate = CalendarStartDate; var endDate = CalendarEndDate; var timesheets = _data.Where(x => x.StartTime.Date >= startDate && x.EndTime.Date <= endDate).Where(predicates).ToList(); var weeks = new List <TimesheetsOverviewWeekViewModel>(); for (var i = 0; i < TimesheetsCalendarViewModel.WeekCount; i++) { weeks.Add(new TimesheetsOverviewWeekViewModel(TimesheetsCalendarViewModel, CalendarStartDate.AddWeeks(i), timesheets, _sessionSwitches)); } TimesheetsCalendarViewModel.TimesheetsWeeks = weeks; if (TimesheetsDumpViewModel != null) { TimesheetsDumpViewModel.SetCurrentWeek(weeks.Last()); } } else { TimesheetsFiltered = _data.Where(predicates).OrderByDescending(x => x.StartTime.Date).ThenBy(x => x.StartTime).ToList(); } }
void RenderLine(Context cr, DateTime start, int line) { DateTime lineStart = start.AddDays((line - 1) * 7); int offsetSize = Allocation.Width / 9; int centerLine = LineHeight + LineHeight * line + ((Allocation.Height % LineHeight) / 2); int dayOffset = 0; using (Pango.Layout layout = DockServices.Drawing.ThemedPangoLayout()) { Pango.Rectangle inkRect, logicalRect; layout.FontDescription = new Gtk.Style().FontDescription; layout.Ellipsize = Pango.EllipsizeMode.None; layout.Width = Pango.Units.FromPixels(offsetSize); layout.FontDescription.AbsoluteSize = Pango.Units.FromPixels((int)(0.625 * LineHeight)); for (int i = 0; i < 7; i++) { layout.FontDescription.Weight = Pango.Weight.Normal; DateTime day = lineStart.AddDays(dayOffset); if (day.Month == CalendarStartDate.AddDays(6).Month) { cr.Color = new Cairo.Color(1, 1, 1); } else { cr.Color = new Cairo.Color(1, 1, 1, 0.5); } if (day.Date == DateTime.Today) { layout.FontDescription.Weight = Pango.Weight.Bold; Gdk.Color color = Style.Backgrounds [(int)StateType.Selected].SetMinimumValue(100); cr.Color = new Cairo.Color((double)color.Red / ushort.MaxValue, (double)color.Green / ushort.MaxValue, (double)color.Blue / ushort.MaxValue, 1.0); } dayOffset++; layout.SetText(string.Format("{0:00}", day.Day)); layout.GetPixelExtents(out inkRect, out logicalRect); cr.MoveTo(offsetSize + offsetSize * i + (offsetSize - inkRect.Width) / 2, centerLine - logicalRect.Height); Pango.CairoHelper.LayoutPath(cr, layout); cr.Fill(); } cr.Color = new Cairo.Color(1, 1, 1, 0.4); int woy = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(lineStart.AddDays(6), DateTimeFormatInfo.CurrentInfo.CalendarWeekRule, DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek); layout.FontDescription.Weight = Pango.Weight.Bold; layout.SetText(string.Format("W{0:00}", woy)); layout.GetPixelExtents(out inkRect, out logicalRect); cr.MoveTo(offsetSize * 8, centerLine - logicalRect.Height); Pango.CairoHelper.LayoutPath(cr, layout); cr.Fill(); layout.FontDescription.Dispose(); layout.Context.Dispose(); } }