示例#1
0
        protected void rptEvents_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                string[]           myDateTimePatterns = new string[] { "MM/dd/yy", "MM/dd/yyyy" };
                CultureInfo        ci   = new CultureInfo("pt-BR");
                DateTimeFormatInfo dtfi = ci.DateTimeFormat;

                cEvent item = (cEvent)e.Item.DataItem;

                Literal ltMonth = (Literal)e.Item.FindControl("ltMonth");
                ltMonth.Text = dtfi.AbbreviatedMonthGenitiveNames[item.dateInit.Month - 1].ToUpper();

                Literal ltDay = (Literal)e.Item.FindControl("ltDay");
                ltDay.Text = String.Format("{0:dd}", item.dateInit);

                Literal ltEvent = (Literal)e.Item.FindControl("ltEvent");
                ltEvent.Text = item.name;

                Literal ltHour = (Literal)e.Item.FindControl("ltHour");
                ltHour.Text = String.Format("{0:HH:mm}", item.dateInit) + (item.dateFinish.HasValue ? " - " + String.Format("{0:HH:mm}", item.dateFinish.Value) : "");

                HyperLink hyEvent = (HyperLink)e.Item.FindControl("hyEvent");
                hyEvent.Text = "Assista";
                hyEvent.Attributes.Add("href", item.url);
            }
        }
示例#2
0
        protected void rptVideos_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                cEvent item = (cEvent)e.Item.DataItem;

                Panel pnVideo = (Panel)e.Item.FindControl("pnVideo");
                if (e.Item.ItemIndex == 0)
                {
                    pnVideo.CssClass = "item active";
                }
                else
                {
                    pnVideo.CssClass = "item";
                }

                Literal ltVideo = (Literal)e.Item.FindControl("ltVideo");
                ltVideo.Text = "<iframe class='video-iframe' src='" + item.url + "' frameborder='0' allowfullscreen=''></iframe>";
            }
        }
示例#3
0
        protected void rptEvents_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                string[]           myDateTimePatterns = new string[] { "MM/dd/yy", "MM/dd/yyyy" };
                CultureInfo        ci   = new CultureInfo("pt-BR");
                DateTimeFormatInfo dtfi = ci.DateTimeFormat;

                cEvent item = (cEvent)e.Item.DataItem;

                Literal ltMonth = (Literal)e.Item.FindControl("ltMonth");
                ltMonth.Text = dtfi.AbbreviatedMonthGenitiveNames[item.dateInit.Month - 1].ToUpper();

                Literal ltDay = (Literal)e.Item.FindControl("ltDay");
                ltDay.Text = String.Format("{0:dd}", item.dateInit);

                Literal ltEvent = (Literal)e.Item.FindControl("ltEvent");
                ltEvent.Text = item.name;

                Literal ltHour = (Literal)e.Item.FindControl("ltHour");
                ltHour.Text = String.Format("{0:HH:mm}", item.dateInit) + (item.dateFinish.HasValue ? " - " + String.Format("{0:HH:mm}", item.dateFinish.Value) : "");

                HyperLink hyEvent = (HyperLink)e.Item.FindControl("hyEvent");
                hyEvent.Text = "Assista";
                hyEvent.Attributes.Add("video", item.url);

                Literal ltDescription = (Literal)e.Item.FindControl("ltDescription");
                ltDescription.Text = item.description;

                if (e.Item.ItemIndex == 0)
                {
                    Literal ltVideo = (Literal)e.Item.FindControl("ltVideo");
                    ltVideo.Text = "<iframe class=\"iframe urlFeaturedEvent\" frameborder=\"0\" allowfullscreen=\"\"></iframe>";
                    hddUrlFeaturedEvent.Value = item.url;
                }
            }
        }
示例#4
0
        // 이미지 요청
        internal Bitmap RequestImage()
        {
            const int cellHourWidth = 60;
            const int cellHourHeight = 30;
            var bmp = new Bitmap(ClientSize.Width, cellHourWidth * 24);
            Graphics g = Graphics.FromImage(bmp);
            g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;

            var dt = new DateTime(_calendarDate.Year, _calendarDate.Month, _calendarDate.Day, 0, 0, 0);
            int xStart = 0;
            int yStart = 0;

            g.DrawRectangle(Pens.Black, 0, 0, ClientSize.Width - MarginSize * 2 - 2, cellHourHeight * 24);
            for (int i = 0; i < 24; i++)
            {
                var textWidth = (int)g.MeasureString(dt.ToString("htt").ToLower(), _dayViewTimeFont).Width;
                g.DrawRectangle(Pens.Black, xStart, yStart, cellHourWidth, cellHourHeight);
                g.DrawLine(Pens.Black, xStart + cellHourWidth, yStart + cellHourHeight,
                           ClientSize.Width - MarginSize * 2 - 3, yStart + cellHourHeight);
                g.DrawLine(Pens.DarkGray, xStart + cellHourWidth, yStart + cellHourHeight / 2,
                           ClientSize.Width - MarginSize * 2 - 3, yStart + cellHourHeight / 2);

                g.DrawString(dt.ToString("htt").ToLower(), _dayViewTimeFont, Brushes.Black, xStart + cellHourWidth - textWidth, yStart);
                yStart += cellHourHeight;
                dt = dt.AddHours(1);
            }

            dt = new DateTime(_calendarDate.Year, _calendarDate.Month, _calendarDate.Day, 23, 59, 0);

            List<IEvent> evnts = _events.Where(evnt => NeedsRendering(evnt, dt)).ToList().OrderBy(d => d.Date).ToList();

            xStart = cellHourWidth + 1;
            yStart = 0;

            g.Clip = new Region(new Rectangle(0, 0, ClientSize.Width - MarginSize * 2 - 2, cellHourHeight * 24));
            _cEvents.Clear();
            for (int i = 0; i < 24; i++)
            {
                dt = new DateTime(_calendarDate.Year, _calendarDate.Month, _calendarDate.Day, 0, 0, 0);
                dt = dt.AddHours(i);
                foreach (var evnt in evnts)
                {
                    TimeSpan ts = TimeSpan.FromHours(evnt.EventLengthInHours);

                    if (evnt.Date.Ticks >= dt.Ticks && evnt.Date.Ticks < dt.Add(ts).Ticks && evnt.EventLengthInHours > 0 && i >= evnt.Date.Hour)
                    {
                        int divisor = evnt.Date.Minute == 0 ? 1 : 60 / evnt.Date.Minute;
                        Color clr = Color.FromArgb(175, evnt.EventColor.R, evnt.EventColor.G, evnt.EventColor.B);
                        g.FillRectangle(new SolidBrush(GetFinalBackColor()), xStart, yStart + cellHourHeight / divisor + 1, ClientSize.Width - MarginSize * 2 - cellHourWidth - 3, cellHourHeight * ts.Hours - 1);
                        g.FillRectangle(new SolidBrush(clr), xStart, yStart + cellHourHeight / divisor + 1, ClientSize.Width - MarginSize * 2 - cellHourWidth - 3, cellHourHeight * ts.Hours - 1);
                        g.DrawString(evnt.startTime, evnt.EventFont, new SolidBrush(evnt.EventTextColor), xStart, yStart + cellHourHeight / divisor);
                        g.DrawString(evnt.endTime, evnt.EventFont, new SolidBrush(evnt.EventTextColor), xStart, (yStart * 2) + cellHourHeight / divisor);
                        g.DrawString(evnt.etc, evnt.EventFont, new SolidBrush(evnt.EventTextColor), xStart, (yStart * 3) + cellHourHeight / divisor);
                                                
                        var ces = new cEvent
                        {
                            Event = evnt,
                            Date = dt,
                            EventArea = new Rectangle(xStart, yStart + cellHourHeight / divisor + 1,
                                                                   ClientSize.Width - MarginSize * 2 - cellHourWidth - 3,
                                                                   cellHourHeight * ts.Hours)
                        };
                        _cEvents.Add(ces);
                    }
                }
                yStart += cellHourHeight;
            }

            g.Dispose();
            return bmp;
        }
示例#5
0
        /// <summary>
        /// 생성자
        /// </summary>
        public Calendar()
        {
            InitializeComponent();
            _calendarDate = DateTime.Now;
            _dayOfWeekFont = new Font("Arial", 10, FontStyle.Regular);
            _daysFont = new Font("Arial", 10, FontStyle.Regular);
            _todayFont = new Font("Arial", 10, FontStyle.Bold);
            _dateHeaderFont = new Font("Arial", 12, FontStyle.Bold);
            _dayViewTimeFont = new Font("Arial", 10, FontStyle.Bold);
            _showArrowControls = true;
            _showDateInHeader = true;
            _showTodayButton = true;
            _showingToolTip = false;
            _cEvent = new cEvent();
            _showDisabledEvents = false;
            _showDashedBorderOnDisabledEvents = true;
            _dimDisabledEvents = true;
            AllowEditingEvents = true;
            _highlightCurrentDay = true;
            _calendarView = CalendarViews.Month;
            _scrollPanel = new ScrollPanel();

            _events = new List<IEvent>();
            _rectangles = new List<Rectangle>();
            _calendarDays = new Dictionary<int, Point>();
            _cEvents = new List<cEvent>();
            _showEventTooltips = true;
            //_eventTip = new EventToolTip { Visible = false };

            dateBoxes = new List<DateBox>();

            //Controls.Add(_eventTip);

            LoadPresetHolidays = true;

            _scrollPanel.Visible = false;
            Controls.Add(_scrollPanel);
        }
示例#6
0
        // 해당 달의 캘린더를 그림
        private void RenderMonthCalendar(PaintEventArgs e)
        {
            _calendarDays.Clear();
            _cEvents.Clear();
            dateBoxes.Clear();

            // e.Graphics.draw

            var bmp = new Bitmap(ClientSize.Width, ClientSize.Height);
            Graphics g = Graphics.FromImage(bmp);
            e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
            g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
            SizeF sunSize = g.MeasureString("Sun", _dayOfWeekFont);
            SizeF monSize = g.MeasureString("Mon", _dayOfWeekFont);
            SizeF tueSize = g.MeasureString("Tue", _dayOfWeekFont);
            SizeF wedSize = g.MeasureString("Wed", _dayOfWeekFont);
            SizeF thuSize = g.MeasureString("Thu", _dayOfWeekFont);
            SizeF friSize = g.MeasureString("Fri", _dayOfWeekFont);
            SizeF satSize = g.MeasureString("Sat", _dayOfWeekFont);
            SizeF dateHeaderSize = g.MeasureString(
                _calendarDate.ToString("MMMM") + " " + _calendarDate.Year.ToString(CultureInfo.InvariantCulture), _dateHeaderFont);
            int headerSpacing = Max(sunSize.Height, monSize.Height, tueSize.Height, wedSize.Height, thuSize.Height, friSize.Height,
                          satSize.Height) + 5;
            int controlsSpacing = ((!_showTodayButton) && (!_showDateInHeader) && (!_showArrowControls)) ? 0 : 30;
            int cellWidth = (ClientSize.Width - MarginSize * 2) / 7;
            int numWeeks = NumberOfWeeks(_calendarDate.Year, _calendarDate.Month);
            int cellHeight = (ClientSize.Height - MarginSize * 2 - headerSpacing - controlsSpacing) / numWeeks;
            int xStart = MarginSize;
            int yStart = MarginSize;
            DayOfWeek startWeekEnum = new DateTime(_calendarDate.Year, _calendarDate.Month, 1).DayOfWeek;
            int startWeek = ((int)startWeekEnum) + 1;
            int rogueDays = startWeek - 1;

            yStart += headerSpacing + controlsSpacing;

            int counter = 1;
            int counter2 = 1;

            bool first = false;
            bool first2 = false;

            
            _todayBtn.Location = new Point(MarginSize, MarginSize);

            // 달력 그리는 부분
            for (int y = 0; y < numWeeks; y++)
            {
                for (int x = 0; x < 7; x++)
                {
                    if (rogueDays == 0 && counter <= DateTime.DaysInMonth(_calendarDate.Year, _calendarDate.Month))
                    {
                        if (!_calendarDays.ContainsKey(counter))
                            _calendarDays.Add(counter, new Point(xStart, (int)(yStart + 2f + g.MeasureString(counter.ToString(CultureInfo.InvariantCulture), _daysFont).Height)));

                        // Today
                        if (_calendarDate.Year == DateTime.Now.Year && _calendarDate.Month == DateTime.Now.Month
                         && counter == DateTime.Now.Day && _highlightCurrentDay)
                        {
                            g.FillRectangle(new SolidBrush(Color.FromArgb(234, 234, 234)), xStart, yStart, cellWidth, cellHeight);
                        }

                        if(counter == selectedDay)
                        {
                            g.FillRectangle(new SolidBrush(Color.AliceBlue), xStart, yStart, cellWidth, cellHeight);
                        }

                        // Date 이벤트 부여를 위한 날짜 + Rectangle 구조 저장
                        DateBox dateInfo = new DateBox();
                        dateInfo.month = _calendarDate.Month;
                        dateInfo.date = counter;
                        dateInfo.size = new Rectangle(xStart, yStart, cellWidth, cellHeight);
                        dateBoxes.Add(dateInfo);

                        // 날짜 그리기
                        if (first == false)
                        {
                            first = true;
                            if (_calendarDate.Year == DateTime.Now.Year && _calendarDate.Month == DateTime.Now.Month
                         && counter == DateTime.Now.Day)
                            {
                                g.DrawString(counter.ToString(CultureInfo.InvariantCulture), _todayFont, Brushes.Black, xStart + 5, yStart + 2);
                            }
                            else
                            {
                                g.DrawString(counter.ToString(CultureInfo.InvariantCulture), _daysFont, Brushes.Black, xStart + 5, yStart + 2);
                            }
                        }
                        else
                        {
                            if (_calendarDate.Year == DateTime.Now.Year && _calendarDate.Month == DateTime.Now.Month
                         && counter == DateTime.Now.Day)
                            {
                                g.DrawString(counter.ToString(CultureInfo.InvariantCulture), _todayFont, Brushes.Black, xStart + 5, yStart + 2);
                            }
                            else
                            {
                                g.DrawString(counter.ToString(CultureInfo.InvariantCulture), _daysFont, Brushes.Black, xStart + 5, yStart + 2);
                            }
                        }
                        counter++;
                    }
                    else if (rogueDays > 0)
                    {
                        int dm =
                            DateTime.DaysInMonth(_calendarDate.AddMonths(-1).Year, _calendarDate.AddMonths(-1).Month) -
                            rogueDays + 1;
                        g.DrawString(dm.ToString(CultureInfo.InvariantCulture), _daysFont, new SolidBrush(Color.FromArgb(170, 170, 170)), xStart + 5, yStart + 2);
                        rogueDays--;
                    }

                    // 달력 선 그리기
                    
                    g.DrawRectangle(Pens.DarkGray, xStart, yStart, cellWidth, cellHeight);
                    

                    if (rogueDays == 0 && counter > DateTime.DaysInMonth(_calendarDate.Year, _calendarDate.Month))
                    {
                        if (first2 == false)
                            first2 = true;
                        else
                        {
                            if (counter2 == 1)
                            {
                                g.DrawString(_calendarDate.AddMonths(1).ToString("MMM") + " " + counter2.ToString(CultureInfo.InvariantCulture), _daysFont,
                                            new SolidBrush(Color.FromArgb(170, 170, 170)), xStart + 5, yStart + 2);
                            }
                            else
                            {
                                g.DrawString(counter2.ToString(CultureInfo.InvariantCulture), _daysFont,
                                             new SolidBrush(Color.FromArgb(170, 170, 170)), xStart + 5, yStart + 2);
                            }
                            counter2++;
                            counter++;
                        }
                    }
                    xStart += cellWidth;
                }
                xStart = MarginSize;
                yStart += cellHeight;
            }
            xStart = MarginSize + ((cellWidth - (int)sunSize.Width) / 2);
            yStart = MarginSize + controlsSpacing;

            g.DrawString("Sun", _dayOfWeekFont, Brushes.Red, xStart, yStart);
            xStart = MarginSize + ((cellWidth - (int)monSize.Width) / 2) + cellWidth;
            g.DrawString("Mon", _dayOfWeekFont, Brushes.Black, xStart, yStart);

            xStart = MarginSize + ((cellWidth - (int)tueSize.Width) / 2) + cellWidth * 2;
            g.DrawString("Tue", _dayOfWeekFont, Brushes.Black, xStart, yStart);

            xStart = MarginSize + ((cellWidth - (int)wedSize.Width) / 2) + cellWidth * 3;
            g.DrawString("Wed", _dayOfWeekFont, Brushes.Black, xStart, yStart);

            xStart = MarginSize + ((cellWidth - (int)thuSize.Width) / 2) + cellWidth * 4;
            g.DrawString("Thu", _dayOfWeekFont, Brushes.Black, xStart, yStart);

            xStart = MarginSize + ((cellWidth - (int)friSize.Width) / 2) + cellWidth * 5;
            g.DrawString("Fri", _dayOfWeekFont, Brushes.Black, xStart, yStart);

            xStart = MarginSize + ((cellWidth - (int)satSize.Width) / 2) + cellWidth * 6;
            g.DrawString("Sat", _dayOfWeekFont, Brushes.Red, xStart, yStart);

            // 년도 쓰는 부분
            if (_showDateInHeader)
            {
                g.DrawString(
                    _calendarDate.Year.ToString(CultureInfo.InvariantCulture) + "년 " + _calendarDate.ToString("MMMM"),
                    _dateHeaderFont, Brushes.Black, ClientSize.Width / 2,
                    MarginSize);

                // 범례 부분
                Font ImageInfoFont = new Font("Arial", 8, FontStyle.Regular);

                g.DrawRectangle(Pens.Black, new Rectangle(ClientSize.Width - 105, MarginSize - 16, 80, 46));

                
                
                Bitmap start = new Bitmap(Application.StartupPath + @"\image\start.png");
                Rectangle startSize = new Rectangle(ClientSize.Width - 100, MarginSize - 12, 10, 12);
                g.DrawImage(start, startSize);
                
                g.DrawString("근무 시작", ImageInfoFont, Brushes.Black, ClientSize.Width - 100 + 12, MarginSize - 12);

                
                 
                Bitmap end = new Bitmap(Application.StartupPath + @"\image\end.png");
                Rectangle endSize = new Rectangle(ClientSize.Width - 100, MarginSize + 2, 10, 12);
                g.DrawImage(end, endSize);
                
                g.DrawString("근무 종료", ImageInfoFont, Brushes.Black, ClientSize.Width - 100 + 12, MarginSize + 2);
                
                Bitmap etc = new Bitmap(Application.StartupPath + @"\image\etc.png");
                Rectangle etcSize = new Rectangle(ClientSize.Width - 100, MarginSize + 16, 10, 12);
                g.DrawImage(etc, etcSize);

                g.DrawString("비고", ImageInfoFont, Brushes.Black, ClientSize.Width - 100 + 12, MarginSize + 16);
            
            }

            // 해당 년과 달의 이벤트를 찾아서 그리는 부분
            for (int i = 1; i <= DateTime.DaysInMonth(_calendarDate.Year, _calendarDate.Month); i++)
            {
                int renderOffsetY = 0;
                
                foreach (IEvent v in _events)
                {
                    var dt = new DateTime(_calendarDate.Year, _calendarDate.Month, i, 23, 59, _calendarDate.Second);
                    // 해당 Date에 이벤트가 존재하면
                    if (NeedsRendering(v, dt))
                    {
                        int alpha = 255;
                        if (!v.Enabled && _dimDisabledEvents)
                            alpha = 64;
                        Color alphaColor = Color.FromArgb(alpha, v.EventColor.R, v.EventColor.G, v.EventColor.B);

                        int offsetY = renderOffsetY;
                        Region r = g.Clip;
                        Point point = _calendarDays[i];
                        SizeF sz = g.MeasureString(v.startTime, v.EventFont);
                        int yy = point.Y - 1;
                        int xx = ((cellWidth - (int)sz.Width) / 2) + point.X;

                        if (sz.Width > cellWidth)
                            xx = point.X;
                        if (renderOffsetY + sz.Height > cellHeight - 10)
                            continue;
                        g.Clip = new Region(new Rectangle(point.X + 1, point.Y + offsetY, cellWidth - 1, (int)(sz.Height * 4)));
                        //g.FillRectangle(new SolidBrush(alphaColor), point.X + 1, point.Y + offsetY, cellWidth - 1, sz.Height);
                        if (!v.Enabled && _showDashedBorderOnDisabledEvents)
                        {
                            var p = new Pen(new SolidBrush(Color.FromArgb(255, 0, 0, 0))) { DashStyle = DashStyle.Dash };
                            g.DrawRectangle(p, point.X + 1, point.Y + offsetY, cellWidth - 2, sz.Height - 1);
                        }
                        // 근무 시작 이미지와 글씨 입력
                        Bitmap start = new Bitmap(Application.StartupPath + @"\image\start.png");
                        Rectangle startSize = new Rectangle(xx, yy + offsetY, 10, (int)(sz.Height + 1));
                        g.DrawImage(start, startSize);
                        g.DrawString(v.startTime, v.EventFont, new SolidBrush(v.EventTextColor), xx + 10, yy + offsetY);

                        // 근무 마침 이미지와 글씨 입력
                        Bitmap end = new Bitmap(Application.StartupPath + @"\image\end.png");
                        Rectangle endSize = new Rectangle(xx, yy + (int)(sz.Height + 1), 10, (int)(sz.Height + 1));
                        g.DrawImage(end, endSize);
                        g.DrawString(v.endTime, v.EventFont, new SolidBrush(v.EventTextColor), xx + 10, yy + (int)(sz.Height + 1));

                        // 비고란 이미지와 글씨 입력
                        Bitmap etc = new Bitmap(Application.StartupPath + @"\image\etc.png");
                        Rectangle etcSize = new Rectangle(xx, yy + (int)((sz.Height + 1) * 2), 10, (int)(sz.Height + 1));
                        g.DrawImage(etc, etcSize);
                        g.DrawString(v.etc, v.EventFont, new SolidBrush(v.EventTextColor), xx + 10, yy + (int)((sz.Height + 1) * 2));
                        
                        g.Clip = r;

                        var evs = new cEvent
                        {
                            EventArea = new Rectangle(point.X + 1, point.Y + offsetY, cellWidth - 1, (int)sz.Height),
                            Event = v,
                            Date = dt
                        };

                        _cEvents.Add(evs);
                        renderOffsetY += (int)sz.Height + 1;
                    }
                }
            }
            _rectangles.Clear();

            g.Dispose();

            
            e.Graphics.DrawImage(bmp, 0, 0, ClientSize.Width, ClientSize.Height);
            bmp.Dispose();
        }