Exemple #1
0
        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();
            }
        }
Exemple #5
0
        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();
            }
        }