public MainWindow() { InitializeComponent(); tvProgramManager = new TvProgramManager(); TvProgramStatistics = new TvProgramStatistics(); countdown = new Countdown(); countdown.ProgramIncoming += DisplayAlert; }
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 }); } }
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}"); }