コード例 #1
0
        public void Render(Graphics g, RendererParameters parameters)
        {
            if (parameters.IsMouseOver && !parameters.IsPressed)
            {
                // mouse over highlight
                g.Clear(BgHighlightColor);
            }

            using (var bmp = new Bitmap(parameters.WindowSize.Width, parameters.WindowSize.Height, PixelFormat.Format32bppArgb))
            {
                // CLeartype does not work with transparent backgrounds
                // -> draw it on solid black and convert it to transparent afterwards
                // decide on Black/WHite depending on brightness of FontColor?
                Color chromaColor   = FontColor == Color.Black ? Color.White : Color.Black;
                Color fontdrawColor = FontColor == Color.Black ? Color.Black : Color.White;

                using (var gbmp = Graphics.FromImage(bmp))
                {
                    gbmp.Clear(chromaColor);

                    gbmp.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                    gbmp.PixelOffsetMode    = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
                    gbmp.TextRenderingHint  = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;

                    var cWeek = CalendarWeek.GetCalendarWeek(DateTime.Today, WeekRule);

                    String text = DisplayFormatString.Replace("%week%", $"{cWeek.Week}").Replace("%year%", $"{cWeek.Year}");

                    int padding         = 3;
                    int linePadding     = 2;
                    int availableHeight = parameters.WindowSize.Height - 2 * padding;

                    String[] lines = text.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
                    // get maximum number of lines which can be displayed
                    if (lines.Length > 0)
                    {
                        int lineHeight    = (int)gbmp.MeasureString("W", Font).Height;
                        int maxLines      = availableHeight / lineHeight;
                        int linesToDraw   = Math.Min(maxLines, lines.Length);
                        int heightPerLine = availableHeight / linesToDraw;

                        using (StringFormat sf = StringFormat.GenericTypographic)
                            using (var textBrush = new SolidBrush(fontdrawColor))
                            {
                                sf.Alignment     = StringAlignment.Center;
                                sf.LineAlignment = StringAlignment.Center;

                                for (int i = 0; i < linesToDraw; i++)
                                {
                                    var windowRect = new Rectangle(0, padding + i * (heightPerLine + linePadding), parameters.WindowSize.Width, heightPerLine);
                                    gbmp.DrawString(lines[i], Font, textBrush, windowRect, sf);
                                }
                            }
                    }
                }

                RemoveChroma(bmp, FontColor, chromaColor);
                g.DrawImage(bmp, 0, 0);
            }
        }
コード例 #2
0
        /* Methode zur Ermittlung des Startdatums einer internationalen Kalenderwoche */
        public static System.DateTime GetCalendarWeekStartDate(
            int calendarWeek, int year)
        {
            // Basisdatum (1.1. des angegebenen Jahres) ermitteln
            System.DateTime startDate = new System.DateTime(
                year, 1, 1);

            // Das Datum des ersten Wochentags dieser Woche ermitteln
            while (startDate.DayOfWeek !=
                   CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek)
            {
                startDate = startDate.AddDays(-1);
            }

            // Die Kalenderwoche ermitteln: Wenn es sich um die Woche 1 handelt,
            // ist dies das Basisdatum für die Berechnung, wenn nicht, müssen
            // sieben Tage aufaddiert werden
            CalendarWeek cw = GetCalendarWeek2(startDate);

            if (cw.Week != 1)
            {
                startDate = startDate.AddDays(7);
            }

            // Das Ergebnisdatum ermitteln
            return(startDate.AddDays((calendarWeek - 1) * 7));
        }
コード例 #3
0
 public void ReturnCorrectdaysForIsoWeek()
 {
     var dates = TestDates();
     foreach (var dateTime in dates)
     {
         var isoWeek = new CalendarWeek(dateTime.Value.Item1, dateTime.Value.Item2, dateTime.Key.Month);
         var daysOfWeek = isoWeek.Days;
         var targDay = dateTime.Key;
         Assert.Contains(targDay, daysOfWeek.Select(d => d.Date));
         //Assert.Equal(dateTime.Value.Item2, dateTime.Key.GetIso8601WeekOfYear());
         //Assert.Equal(dateTime.Value.Item1, dateTime.Key.GetIso8601YearOfYear());
     }
 }
コード例 #4
0
 // GET: /Week/year/month
 public ActionResult Index(int? year, int? week, int? targetMonth)
 {
     int yearnumber = year ?? DateTime.Now.Year;
     int weekNumber = week ?? 1;
     int monthNumber = targetMonth ?? DateTime.Now.Month;
     var calendarWeek = new CalendarWeek(yearnumber, weekNumber, monthNumber);
     var eventBookings = RavenSession.Query<CalendarBooking>().Where(c => c.StartTime > calendarWeek.Start && c.StartTime < calendarWeek.End).ToList();
     var mappedBookings = AutoMapper.Mapper.Map<List<CalendarBooking>, List<EventViewModel>>(eventBookings);
     foreach (var calendarDay in calendarWeek.Days)
     {
         calendarDay.LoadBookings(mappedBookings);
     }
     return PartialView(calendarWeek);
 }
コード例 #5
0
        /* Methode zur Ermittlung der Anzahl der Kalenderwochen eines Jahres */
        public static int GetCalendarWeekCount(int year)
        {
            // Kalenderwoche des 31.12. des Jahres ermitteln
            System.DateTime baseDate     = new System.DateTime(year, 12, 31);
            CalendarWeek    calendarWeek = GetCalendarWeek2(baseDate);

            // Wenn dieser Tag in die Woche 1 des neuen Jahres fällt, die Kalenderwoche
            // des um eine Woche reduzierten Datums ermitteln
            if (calendarWeek.Week == 1)
            {
                return(GetCalendarWeek2(baseDate.AddDays(-7)).Week);
            }

            // Ergebnis zurückgeben
            return(calendarWeek.Week);
        }
コード例 #6
0
ファイル: DateLogicHelper.cs プロジェクト: progas83/VrDoor
        public List <CalendarWeek> GetWeeksOfMonth(int year, int monthNumber)
        {
            List <CalendarWeek> weeks = new List <CalendarWeek>();
            int          daysInMonth  = GetDaysInMonth(year, monthNumber);
            CalendarWeek tmpWeek      = null;
            int          weekOfMonth  = 0;

            for (int i = 1; i <= daysInMonth; i++)
            {
                if (tmpWeek == null)
                {
                    tmpWeek             = new CalendarWeek();
                    tmpWeek.WeekOfMonth = weekOfMonth;
                }
                int dayOfWeek           = (int)new DateTime(year, monthNumber, i).DayOfWeek;
                int arrayIndexOfWeekDay = dayOfWeek - 1;
                if (arrayIndexOfWeekDay < 0)
                {
                    arrayIndexOfWeekDay = this.lastDayOfWeekSundayNumber;
                }

                tmpWeek.DaysOfWeek[arrayIndexOfWeekDay] = new CalendarDay()
                {
                    DayOfMonth = i
                };

                if (arrayIndexOfWeekDay == this.lastDayOfWeekSundayNumber)
                {
                    weeks.Add(tmpWeek);
                    tmpWeek = null;
                    weekOfMonth++;
                }
            }

            if (tmpWeek != null)
            {
                weeks.Add(tmpWeek);
            }

            return(weeks);
        }
コード例 #7
0
        private async Task <string> GetWeekIdentifierAsync(CalendarWeek date, bool createIfNotExists)
        {
            if (createIfNotExists)
            {
                var query = _graphClient
                            .Cypher
                            .Merge("(a:Week { week: {week}, year: {year} })")
                            .OnCreate()
                            .Set("a.uniqueId = {id}, a.week = {week}, a.year = {year}")
                            .WithParams(
                    new
                {
                    id   = Guid.NewGuid().ToString(),
                    week = date.WeekNumber,
                    year = date.Date.Year
                })
                            .Return <string>("a.uniqueId");
                var results = await query.ResultsAsync.ConfigureAwait(false);

                return(results.FirstOrDefault());
            }
            else
            {
                var query = _graphClient
                            .Cypher
                            .Match("(a:Week { week: {week}, year: {year} })")
                            .WithParams(
                    new
                {
                    week = date.WeekNumber,
                    year = date.Date.Year
                })
                            .Return <string>("a.uniqueId");
                var results = await query.ResultsAsync.ConfigureAwait(false);

                return(results.FirstOrDefault());
            }
        }
コード例 #8
0
        public async Task <TimeTreeReference> Get(DateTimeOffset date)
        {
            // Create year (link if possible)
            var yearId = await GetYearIdentifierAsync(date, true).ConfigureAwait(false);

            var prevYearId = await GetYearIdentifierAsync(date.AddYears(-1), false).ConfigureAwait(false);

            var nextYearId = await GetYearIdentifierAsync(date.AddYears(1), false).ConfigureAwait(false);

            await CreateLinkIfNotExistsAsync(
                "NEXT", "Year", prevYearId,
                "PREV", "Year", yearId)
            .ConfigureAwait(false);
            await CreateLinkIfNotExistsAsync(
                "NEXT", "Year", yearId,
                "PREV", "Year", nextYearId)
            .ConfigureAwait(false);

            if (_configuration.Specificity == TimeTreeSpecificity.Years)
            {
                return(new TimeTreeReference("Year", yearId));
            }

            // Create quarter
            var quarter   = new CalendarQuarter(date);
            var quarterId = await GetQuarterIdentifierAsync(quarter, true).ConfigureAwait(false);

            var prevQuarterId = await GetQuarterIdentifierAsync(quarter.Previous, false).ConfigureAwait(false);

            var nextQuarterId = await GetQuarterIdentifierAsync(quarter.Next, false).ConfigureAwait(false);

            await CreateLinkIfNotExistsAsync(
                "NEXT", "Quarter", prevQuarterId,
                "PREV", "Quarter", quarterId)
            .ConfigureAwait(false);
            await CreateLinkIfNotExistsAsync(
                "NEXT", "Quarter", quarterId,
                "PREV", "Quarter", nextQuarterId)
            .ConfigureAwait(false);
            await CreateLinkIfNotExistsAsync(
                "CHILD_QUARTER", "Year", yearId,
                "PARENT_YEAR", "Quarter", quarterId)
            .ConfigureAwait(false);

            if (_configuration.Specificity == TimeTreeSpecificity.Quarters)
            {
                return(new TimeTreeReference("Quarter", quarterId));
            }

            // Create month
            var monthId = await GetMonthIdentifierAsync(date, true).ConfigureAwait(false);

            var prevMonthId = await GetMonthIdentifierAsync(date.AddMonths(-1), false).ConfigureAwait(false);

            var nextMonthId = await GetMonthIdentifierAsync(date.AddMonths(1), false).ConfigureAwait(false);

            await CreateLinkIfNotExistsAsync(
                "NEXT", "Month", prevMonthId,
                "PREV", "Month", monthId)
            .ConfigureAwait(false);
            await CreateLinkIfNotExistsAsync(
                "NEXT", "Month", monthId,
                "PREV", "Month", nextMonthId)
            .ConfigureAwait(false);
            await CreateLinkIfNotExistsAsync(
                "CHILD_MONTH", "Year", yearId,
                "PARENT_YEAR", "Month", monthId)
            .ConfigureAwait(false);
            await CreateLinkIfNotExistsAsync(
                "CHILD_MONTH", "Quarter", quarterId,
                "PARENT_QUARTER", "Month", monthId)
            .ConfigureAwait(false);

            if (_configuration.Specificity == TimeTreeSpecificity.Months)
            {
                return(new TimeTreeReference("Month", monthId));
            }

            // Create week
            var week   = new CalendarWeek(date, _configuration.FirstDayOfWeek);
            var weekId = await GetWeekIdentifierAsync(week, true).ConfigureAwait(false);

            var prevWeekId = await GetWeekIdentifierAsync(week.Previous, false).ConfigureAwait(false);

            var nextWeekId = await GetWeekIdentifierAsync(week.Next, false).ConfigureAwait(false);

            await CreateLinkIfNotExistsAsync(
                "NEXT", "Week", prevWeekId,
                "PREV", "Week", weekId)
            .ConfigureAwait(false);
            await CreateLinkIfNotExistsAsync(
                "NEXT", "Week", weekId,
                "PREV", "Week", nextWeekId)
            .ConfigureAwait(false);
            await CreateLinkIfNotExistsAsync(
                "CHILD_WEEK", "Year", yearId,
                "PARENT_YEAR", "Week", weekId)
            .ConfigureAwait(false);
            await CreateLinkIfNotExistsAsync(
                "CHILD_WEEK", "Quarter", quarterId,
                "PARENT_QUARTER", "Week", weekId)
            .ConfigureAwait(false);

            if (_configuration.Specificity == TimeTreeSpecificity.Weeks)
            {
                return(new TimeTreeReference("Week", weekId));
            }

            // Create day
            var dayId = await GetDayIdentifierAsync(date, true).ConfigureAwait(false);

            var prevDayId = await GetDayIdentifierAsync(date.AddDays(-1), false).ConfigureAwait(false);

            var nextDayId = await GetDayIdentifierAsync(date.AddDays(1), false).ConfigureAwait(false);

            await CreateLinkIfNotExistsAsync(
                "NEXT", "Day", prevDayId,
                "PREV", "Day", weekId)
            .ConfigureAwait(false);
            await CreateLinkIfNotExistsAsync(
                "NEXT", "Day", weekId,
                "PREV", "Day", nextDayId)
            .ConfigureAwait(false);
            await CreateLinkIfNotExistsAsync(
                "CHILD_DAY", "Month", quarterId,
                "PARENT_MONTH", "Day", dayId)
            .ConfigureAwait(false);
            await CreateLinkIfNotExistsAsync(
                "CHILD_DAY", "Week", weekId,
                "PARENT_WEEK", "Day", dayId)
            .ConfigureAwait(false);

            if (_configuration.Specificity == TimeTreeSpecificity.Days)
            {
                return(new TimeTreeReference("Day", dayId));
            }

            // Create hour
            var hourId = await GetHourIdentifierAsync(date, true).ConfigureAwait(false);

            var prevHourId = await GetHourIdentifierAsync(date.AddHours(-1), false).ConfigureAwait(false);

            var nextHourId = await GetHourIdentifierAsync(date.AddHours(1), false).ConfigureAwait(false);

            await CreateLinkIfNotExistsAsync(
                "NEXT", "Hour", prevHourId,
                "PREV", "Hour", hourId)
            .ConfigureAwait(false);
            await CreateLinkIfNotExistsAsync(
                "NEXT", "Hour", hourId,
                "PREV", "Hour", nextHourId)
            .ConfigureAwait(false);
            await CreateLinkIfNotExistsAsync(
                "CHILD_HOUR", "Day", dayId,
                "PARENT_DAY", "Hour", hourId)
            .ConfigureAwait(false);

            if (_configuration.Specificity == TimeTreeSpecificity.Hours)
            {
                return(new TimeTreeReference("Hour", hourId));
            }

            // Create minute
            var minuteId = await GetMinuteIdentifierAsync(date, true).ConfigureAwait(false);

            var prevMinuteId = await GetMinuteIdentifierAsync(date.AddMinutes(-1), false).ConfigureAwait(false);

            var nextMinuteId = await GetMinuteIdentifierAsync(date.AddMinutes(1), false).ConfigureAwait(false);

            await CreateLinkIfNotExistsAsync(
                "NEXT", "Minute", prevMinuteId,
                "PREV", "Minute", minuteId)
            .ConfigureAwait(false);
            await CreateLinkIfNotExistsAsync(
                "NEXT", "Minute", minuteId,
                "PREV", "Minute", nextMinuteId)
            .ConfigureAwait(false);
            await CreateLinkIfNotExistsAsync(
                "CHILD_MINUTE", "Minute", hourId,
                "PARENT_HOUR", "Hour", minuteId)
            .ConfigureAwait(false);

            if (_configuration.Specificity == TimeTreeSpecificity.Minutes)
            {
                return(new TimeTreeReference("Minute", minuteId));
            }

            // Create second
            var secondId = await GetSecondIdentifierAsync(date, true).ConfigureAwait(false);

            var prevSecondId = await GetSecondIdentifierAsync(date.AddSeconds(-1), false).ConfigureAwait(false);

            var nextSecondId = await GetSecondIdentifierAsync(date.AddSeconds(1), false).ConfigureAwait(false);

            await CreateLinkIfNotExistsAsync(
                "NEXT", "Second", prevSecondId,
                "PREV", "Second", secondId)
            .ConfigureAwait(false);
            await CreateLinkIfNotExistsAsync(
                "NEXT", "Second", secondId,
                "PREV", "Second", nextSecondId)
            .ConfigureAwait(false);
            await CreateLinkIfNotExistsAsync(
                "CHILD_SECOND", "Second", minuteId,
                "PARENT_MINUTE", "Minute", secondId)
            .ConfigureAwait(false);

            return(new TimeTreeReference("Second", secondId));
        }