Example #1
0
 public MainWindow()
 {
     InitializeComponent();
     tvProgramManager           = new TvProgramManager();
     TvProgramStatistics        = new TvProgramStatistics();
     countdown                  = new Countdown();
     countdown.ProgramIncoming += DisplayAlert;
 }
Example #2
0
        private void Tick(object sender, ElapsedEventArgs args)
        {
            TvProgram newProgram = TvProgramManager.GetNextProgram(new TimeSpan(0, 15, 0));

            if (newProgram != null && newProgram.ProgramId != tvProgram.ProgramId)
            {
                tvProgram = newProgram;
                ProgramIncoming?.Invoke(this, new TvProgramIncomingEventArgs()
                {
                    TVProgram = tvProgram
                });
            }
        }
Example #3
0
        private void InitializeComponent()
        {
            BackColor   = Color.White;
            Size        = new Size(383, 80);
            BorderStyle = BorderStyle.FixedSingle;
            labelTitle  = new Label()
            {
                Location    = new System.Drawing.Point(55, 4),
                Size        = new Size(257, 21),
                AutoSize    = true,
                MaximumSize = new Size(220, 21),
                Font        = new System.Drawing.Font("Segoe UI", 12, System.Drawing.FontStyle.Bold),
                Text        = program.Title
            };
            labelGenre = new Label()
            {
                Font        = new System.Drawing.Font("Segoe UI", 8, System.Drawing.FontStyle.Regular),
                Location    = new Point(56, 28),
                Size        = new Size(240, 30),
                AutoSize    = true,
                MaximumSize = new Size(240, 70),
                Text        = TvProgramManager.GetGenresAsString(program.Genre)
            };

            labelStartTime = new Label()
            {
                Font     = new System.Drawing.Font("Segoe UI", 14, System.Drawing.FontStyle.Bold),
                Location = new Point(-2, 3),
                Text     = program.StartTime.ToString("HH:mm")
            };
            labelTimeLength = new Label()
            {
                Font     = new System.Drawing.Font("Segoe UI", 8, System.Drawing.FontStyle.Bold),
                Location = new Point(3, 26),
                Text     = (program.EndTime - program.StartTime).TotalMinutes.ToString("0") + " perc"
            };
            labelStatus = new Label()
            {
                Location = new Point(280, 60),
                Font     = new System.Drawing.Font("Segoe UI", 8, System.Drawing.FontStyle.Bold),
                Visible  = false
            };
            pictureKorhatar = new PictureBox()
            {
                Image    = getAgeLimitPic(),
                Location = new Point(337, 10),
                Size     = new Size(32, 32)
            };
            buttonFoglalas = new Button()
            {
                Text      = "Foglalás",
                Location  = new Point(303, 52),
                BackColor = Control.DefaultBackColor,
                Visible   = false
            };
            elapsedTimeProgress = new ProgressBar()
            {
                Visible   = false,
                Location  = new Point(0, 0),
                Size      = new Size(383, 5),
                BackColor = Color.MediumVioletRed,
            };
            CheckProgramElapsedTime();

            //FOGLALÁS BEGINS
            using (TvContext context = new TvContext())
            {
                //Olyan műsorok lekérése, amelyek ugyanabban az időpontban vannak műsoron, mint ebbe a Controlba kapott műsor.
                //Olyan műsor ami foglalva van, hamarabb, vagy ugyanakkor kezdődik mint a kiválasztott és később van vége, mint ahogy a kiválasztott elkezdődne.
                var shows = from vizsgalt in context.Programs
                            where
                            vizsgalt.Reserved != null &&
                            (
                    (vizsgalt.StartTime <= program.StartTime && vizsgalt.EndTime > program.StartTime)
                    ||
                    (vizsgalt.StartTime >= program.StartTime && vizsgalt.EndTime <= program.EndTime)
                    ||
                    (vizsgalt.StartTime >= program.StartTime && vizsgalt.StartTime < program.EndTime)
                    ||
                    (vizsgalt.EndTime >= program.StartTime && vizsgalt.EndTime <= program.EndTime)
                            )
                            select vizsgalt;
                //Látható legyen a foglalás gomb. Minden más többi esetben csak eltüntetve lesz.
                if (room != null)
                {
                    if (program.StartTime >= DateTime.Now || program.StartTime <= DateTime.Now && program.EndTime >= DateTime.Now)
                    {
                        buttonFoglalas.Visible = true;
                    }
                }
                //Ha van olyan műsor amivel átfedésben van
                if (shows.Count() > 0)
                {
                    //Ha ütközik másik programmal, megnézzük, hogy önmaga is a foglalt műsorok között van.
                    bool isSelf = (from p in shows
                                   where p.ProgramId == program.ProgramId
                                   select p)
                                  .Count() > 0;

                    buttonFoglalas.Visible = false;

                    //Ha önmaga az éppen ütköző foglalt műsorok között van, akkor tudatjuk a felhasználóval, ez van az adott időpotban lefoglalva.
                    if (isSelf)
                    {
                        labelStatus.Text = "Lefoglalt";
                        System.Windows.Forms.ToolTip ttt = new System.Windows.Forms.ToolTip();
                        ttt.SetToolTip(labelStatus, "Ez a műsor már le van foglalva, így nézhető lesz.\nLefoglaló szoba: " + program.ReservedRoomId);
                    }
                    else
                    {
                        //Ebben az esetben a műsor nem foglalható le, mert ekkor másik lefoglalt műsor fut. Hogy a felhasználó tudja, hogy mi,
                        //jobb kattintásra context menüben megjelenik a műsor, rákattintva ahhoz a tv csatornához ugrik a program.
                        var reservedShows = from p in shows
                                            where p.ProgramId != program.ProgramId
                                            select p;

                        ContextMenuStrip cm = new ContextMenuStrip()
                        {
                            RenderMode = ToolStripRenderMode.System
                        };
                        //Alap foglalt műsor szöveg és egy divider.
                        ToolStripMenuItem menuItem = new ToolStripMenuItem()
                        {
                            Text = "Foglalt műsor", Enabled = false
                        };
                        cm.Items.Add(menuItem);
                        cm.Items.Add(new ToolStripSeparator());

                        //Ütköző műsor berakása a listába.
                        foreach (var show in reservedShows)
                        {
                            ToolStripMenuItem toolStripMenuItem = new ToolStripMenuItem()
                            {
                                Text = String.Format(
                                    "{0} {1}:{2}-{3}:{4} ({5})",
                                    show.Title,                           //0
                                    show.StartTime.Hour,                  //1
                                    show.StartTime.Minute.ToString("00"), //2
                                    show.EndTime.Hour,                    //3
                                    show.EndTime.Minute.ToString("00"),   //4
                                    show.TvChannel                        //5
                                    )
                            };
                            //Kattintásra elsütjük a SelectedProgramChanged eseményt, ami megváltoztatja a megjelenített csatornát
                            toolStripMenuItem.Click += (i, o) => { SelectedProgramChaned?.Invoke(this, new ProgramChangeEventArgs()
                                {
                                    Program = show
                                }); };
                            //És hozzá is adjuk a menühöz az elemet.
                            cm.Items.Add(toolStripMenuItem);
                        }
                        labelStatus.ContextMenuStrip = cm;
                        //Kis tooltip, hogy érthető legyen miért van kint a felirat.
                        System.Windows.Forms.ToolTip ttt = new System.Windows.Forms.ToolTip();
                        ttt.SetToolTip(labelStatus, "Ebben az időpontban egy másik lefoglalt műsorral van átfedésben.\nJobb kattintással többet megtudhat.");

                        labelStatus.Text = "Nem foglalható";
                    }
                    labelStatus.ForeColor = Color.Gray;
                    labelStatus.Visible   = true;
                }
                else
                {
                    //Ha pedig nincs foglalt program ennek az időpontjában, akkor a gombhoz hozzárendeljük a foglalást megvalósító metódust.
                    buttonFoglalas.Click += (o, i) => { TvProgramManager.ReserveTvProgram(program, room); };
                }
                //Itt pedig felülírjuk a dolgokat annyival, hogyha az adott műsor saját szoba foglalása.
                if (context.Rooms.Find(program.ReservedRoomId) != null)
                {
                    if (room != null && context.Rooms.Find(program.ReservedRoomId).RoomId == room.RoomId)
                    {
                        labelStatus.ForeColor = Color.Green;
                        labelStatus.Text      = "Saját foglalás";
                        labelStatus.Visible   = true;
                    }
                    buttonFoglalas.Visible = false;
                }
            }


            //FOGLALÁS ENDS

            Controls.Add(labelTitle);
            Controls.Add(labelGenre);
            Controls.Add(labelTimeLength);
            Controls.Add(labelStatus);
            Controls.Add(pictureKorhatar);
            Controls.Add(labelStartTime);
            Controls.Add(buttonFoglalas);
            Controls.Add(elapsedTimeProgress);
            elapsedTimeProgress.BringToFront();

            Timer timer = new Timer()
            {
                Interval = 5000
            };

            timer.Tick += (obj, args) => { CheckProgramElapsedTime(); };
            timer.Start();


            System.Windows.Forms.ToolTip tt = new System.Windows.Forms.ToolTip();
            tt.SetToolTip(pictureKorhatar, TvProgramManager.GetAgeLimitMessage(program.AgeLimit));
            tt.SetToolTip(labelStartTime, $"Kezdés: {program.StartTime.TimeOfDay} - Vége: {program.EndTime.TimeOfDay}");
            tt.SetToolTip(labelTimeLength, $"Vége: {program.EndTime.TimeOfDay}");
        }