/// <summary> /// Způsobí uložení změn a zavře okno /// </summary> private void buttonUložit_Click(object sender, EventArgs e) { Databaze db = new Databaze(); if (zmenyDnu.Count > 0) // Jsou nějaké změny ve významných dnech, pokud ano, tak je prostupně projdeme a uložíme do databáze { foreach (int i in zmenyDnu) { db.Dotaz("UPDATE vyznamne_dny SET Upozornit=" + JeZaskrtnuto(i, checkedListBoxVyznamneDny) + " WHERE Datum='" + ZiskejDatum(checkedListBoxVyznamneDny.Items[i].ToString()) + "'"); } } if (zmenySvatku.Count > 0) // Jsou nějaké změny ve svátcích, pokud ano, tak je prostupně projdeme a uložíme do databáze { foreach (int i in zmenySvatku) { db.Dotaz("UPDATE svatky SET Upozornit=" + JeZaskrtnuto(i, checkedListBoxSvatky) + " WHERE Datum='" + ZiskejDatum(checkedListBoxSvatky.Items[i].ToString()) + "'"); } } db.Close(); if (zmenyDnu.Count > 0 || zmenySvatku.Count > 0) // Pokud došlo k nějaké změně, tak je třeba aktualizovat svátky { Obecne.OnZmenaVeSvatcich(); } this.Close(); }
/// <summary> /// Při kliknutí na posunout provede posunutí události /// </summary> private void buttonPosunout_Click(object sender, EventArgs e) { if (comboBoxPosun.SelectedItem == null) { return; } Prehravac.Stop(); string interval = ""; switch (comboBoxPosun.SelectedItem.ToString()) { case "Hodinu": interval = "HOUR"; break; case "Den": interval = "DAY"; break; case "Týden": interval = "WEEK"; break; case "Měsíc": interval = "MONTH"; break; case "Rok": interval = "YEAR"; break; } Obecne.PresunUdalost(Udalost.ToString(), Typ, interval); this.Close(); }
/// <summary> /// Pokud byla v nabídce vybrána možnost smazat událost, tak se smaže a bude provedeno znovunačtení událostí, případně svátků /// </summary> private void toolStripMenuItemSmazatUdalost_Click(object sender, EventArgs e) { Databaze db = new Databaze(); db.Dotaz("SELECT Nadpis FROM udalosti WHERE ID=" + udalost + ";"); // Vytáhneme název události string nadpis = ""; while (db.DalsiVysledek()) { nadpis = db.DejVysledekString("Nadpis"); } db.Dotaz("SELECT COUNT(*) AS Pocet FROM udalosti WHERE Nadpis='" + nadpis + "';"); // Spočítáme kolik událsotí sdílí tento název while (db.DalsiVysledek()) { if (db.DejVysledekInt("Pocet") < 2) // Pokud méně než dva, tak název odstraníme z kolekce našeptávače { Obecne.PametNadpis.Remove(nadpis); } } db.Dotaz("DELETE FROM udalosti WHERE ID=" + udalost + ";"); // Smažeme událost z databáze db.Close(); Obecne.OnZmenaVUdalostech(); // Informujeme o změně v událostech if (typ == (int)Obecne.UdalostiTypy.narozeniny) // V případě narozenin informujeme i o změně narozenin { Obecne.OnZmenaVeSvatcich(); } }
/// <summary> /// Zpracování kliknutí na odeslat, kdy se odešlou data, pokud je vše OK /// </summary> private void buttonOdeslat_Click(object sender, EventArgs e) { if (comboBoxTyp.SelectedIndex == -1) // Byl vybrán typ? { Obecne.ZobrazZpravu("Nevybral jsi zda se jedná o chybu, návrh nebo připomínku!", "Problém", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (richTextBoxZprava.Text == "") // Prázdné zprávy přece posílat nebudeme { Obecne.ZobrazZpravu("Prázdnou zprávu nelze poslat!", "Problém", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } string odpoved = Obecne.PosliDataNaWeb("aplikace=ukolnik&typ=" + comboBoxTyp.SelectedIndex + "&zprava=" + Obecne.OdstranProblemoveHTTPPOSTZnaky(richTextBoxZprava.Text), "http://sqee.eu/programy/ukolnik/formular.php"); if (odpoved == "DONE") // Pokud se odeslání zdařilo, tak zavřít formulář { this.Close(); } else if (odpoved == "ERROR") // Pokud nastala chyba během odesílání, tak již info bylo zobrazeno a tudíž není co zobrazovat { return; } else // Jinak zobrazit info o nezdaru { Obecne.ZobrazZpravu("Zprávu se nepodařilo odeslat, zkus to znovu", "Problém", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// V menu byla vybrána možnost Návrhy a připomínky, takže se zobrazí formulář pro jejich zadání /// </summary> private void toolStripMenuItemNavrhyPripominky_Click(object sender, EventArgs e) { Formular okno = new Formular(); okno.StartPosition = FormStartPosition.Manual; okno.Location = Obecne.UmisteniOkna(this.Location, okno.Size); okno.Show(); }
/// <summary> /// V menu byla vybrána možnost Přehled, takže se zobrazí přehled událostí /// </summary> private void ToolStripMenuItemPrehled_Click(object sender, EventArgs e) { Prehled okno = new Prehled(); okno.StartPosition = FormStartPosition.Manual; okno.Location = Obecne.UmisteniOkna(this.Location, okno.Size); okno.Show(); }
/// <summary> /// V menu byla vybrána možnost o Úkolníku, takže bude zobrazeno okno s informacemi o Úkolníku /// </summary> private void MenuItemOUkolniku_Click(object sender, EventArgs e) { OUkolniku okno = new OUkolniku(); okno.StartPosition = FormStartPosition.Manual; okno.Location = Obecne.UmisteniOkna(this.Location, okno.Size); okno.Show(); }
/// <summary> /// Zobrazí informace k události /// </summary> private void toolStripMenuItemZobrazitUdalost_Click(object sender, EventArgs e) { Podrobnosti okno = new Podrobnosti(udalost); okno.StartPosition = FormStartPosition.Manual; okno.Location = Obecne.UmisteniOkna(((ToolStripMenuItem)sender).Owner.Location, okno.Size, 15); // Získáme pozici nabídky a u ní zobrazíme podrobnosti události okno.Show(); }
/// <summary> /// V menu byla vybrána možnost nastavení svátků, takže to nastavení se zobrazí /// </summary> private void ToolStripMenuItemSvatkyNarozeniny_Click(object sender, EventArgs e) { Svatky okno = new Svatky(); okno.StartPosition = FormStartPosition.Manual; okno.Location = Obecne.UmisteniOkna(this.Location, okno.Size); okno.Show(); }
/// <summary> /// Načte komponenty, získá ID události, připraví text, načte data, vyplní kalendář tučnými daty a ty pak nechá zobrazit, zapně alarm na upozorňování /// </summary> /// <param name="udalost">ID události, která s ebude upravovat</param> public Uprava(int udalost) { InitializeComponent(); Udalost = udalost; this.Text = "Úprava události ID: " + Udalost.ToString(); NactiData(); Obecne.VyplnKalendar(monthCalendar); monthCalendar.UpdateBoldedDates(); alarm.Zapnout(); }
/// <summary> /// V menu byla vybrána možnost Nastavení, vypne se nabídka ikonky a zobrazí se dialog s nastavením /// </summary> private void ToolStripMenuItemNastaveni_Click(object sender, EventArgs e) { Obecne.IkonaStav(false); NastavovaciOkno okno = new NastavovaciOkno(); okno.StartPosition = FormStartPosition.Manual; okno.Location = Obecne.UmisteniOkna(this.Location, okno.Size); okno.ShowDialog(); Obecne.IkonaStav(true); }
/// <summary> /// Načte komponenty, vytvoří dotazy, načte data pro události a svátky, vyplní kalendář, přiřadí nápovědu novým událostem, nastaví ikonu, skryje nové události, zapne sledování změn v událsotech a svátcích a zapne upozorňování /// </summary> public HlavniOkno() { InitializeComponent(); VytvorDotazy(); // Vytvoříme dotazy a načteme data AktualizujSvatky(); AktualizujKalendarNasilne(); textBoxNadpis.AutoCompleteCustomSource = Obecne.PametNadpis; // Nastaví se našeptávač Obecne.IkonaNastav(notifyIcon.ContextMenuStrip); // Nastaví se ikona, aby se mohla vypínat, když se zobrazej dialogy labelZobrazVic_Click(labelZobrazVic, null); // Schováme rozšířené okno Obecne.ZmenaVeSvatcich += AktualizujSvatky; Obecne.ZmenaVUdalostech += AktualizujKalendarNasilne; alarm.Zapnout(); // Zapneme upozorňování na události }
/// <summary> /// Načte svátky a narozeniny na ten den a zobrazí je, nastaví další aktualizaci (třeba začátek dalšího den) /// </summary> private void AktualizujSvatky() { timer.Stop(); Obecne.Svatky(DateTime.Today.ToString("d-M"), labelSvatky, true, true); // Pomocná funkce, která získá požadovaný věci a uloží je do labelu v textovém provedení int dalsi = (23 - DateTime.Now.Hour) * 3600000 + (59 - DateTime.Now.Minute) * 60000 + (59 - DateTime.Now.Second) * 1000 + 30000; if (dalsi <= 0) // Předcházení několikanásobnému aktualizování během jedné sekundy { dalsi = 30000; } timer.Interval = dalsi; timer.Start(); }
/// <summary> /// Vytvoří základní nastavení pro Úkolník, bude ale nutné ho doplnit o heslo do databáze, také vytvoří spoušťák pro Úkolník při startu počítače /// </summary> public static void VytvorNastaveni() { Verze = Obecne.DejVerzi(); Server = "127.0.0.1"; Uzivatel = "root"; Heslo = ""; Databaze = "ukolnik"; Spousteni = true; UpozorneniDopredu = 7; UlozNastaveni(true); //VytvorSpoustak(); VytvorRegistry(); }
/// <summary> /// Obsluha události, kdy v kalendáři změníme datum výběru, aby se načetli nové události /// </summary> private void monthCalendar_DateChanged(object sender, DateRangeEventArgs e) { VytvorDotazy(); // Je potřeba vytvořit nové dotazy pro nový den Obecne.Svatky(monthCalendar.SelectionStart.Day.ToString() + "-" + monthCalendar.SelectionStart.Month.ToString(), labelSvatek); // Získáme přehled svátků pro nový den AktualizujKalendar(); // Aktualizujeme data v kalendáři, ale dopředu, projeví se až později, protože všechna potřebná data pro nové datum už byla načtena předem if ((monthCalendar.SelectionEnd - monthCalendar.SelectionStart).Days > 0 && textBoxCasHodina.Enabled == true) // Vypneme možnost souvislé události pokud nelze nastavovat čas, nebo není vybráno více dnů { checkBoxSouvisla.Enabled = true; } else { checkBoxSouvisla.Enabled = false; } }
/// <summary> /// Provádí čtení konfiguráku a kontroluje aktuálnost údajů /// </summary> /// <returns>True, pokud jsou data aktuální, false pokud nejsou data aktuální</returns> public static bool CtiNastaveni() { System.IO.StreamReader soubor = new System.IO.StreamReader(SlozkaNastaveni + SouborNastaveni); // Otevření konfiguráku while (!soubor.EndOfStream) // Dokud nejsme na samém konci konfiguráku { string radek = soubor.ReadLine(); // Postupně čteme jednotlivé řádky if (radek.Substring(0, 4) == "ver:") // Jestliže je na začátku řádku ver: tak je to info o poslední verzi Úkolníku (důležité pro aktualizace) { Verze = radek.Remove(0, 5); // Odtrhneme začátek a získáme tak verzi } else if (radek.Substring(0, 4) == "ser:") // Jestliže je na začátku řádku ser: tak je to info o databázovém serveru { Server = radek.Remove(0, 5); // Odtrhneme začátek a získáme tak databázový server } else if (radek.Substring(0, 4) == "uzi:") // Jestliže je na začátku řádku uzi: tak je to přihlašovací jméno do databáze { Uzivatel = radek.Remove(0, 5); // Odtrhneme začátek a získáme tak uživatelské jméno pro přihlášení do databáze } else if (radek.Substring(0, 4) == "hes:") // Jestliže je na začátku řádku hes: tak je to heslo pro přihlášení do databáze { Heslo = radek.Remove(0, 5); // Odtrhneme začátek a získáme tak heslo pro přihlášení do databáze } else if (radek.Substring(0, 4) == "dab:") // Jestliže je na začátku řádku dab: tak je to info o databázi obshaující tabulky pro Úkolník { Databaze = radek.Remove(0, 5); // Odtrhneme začátek a získáme tak databázi obsahující tabulky pro Úkolník } else if (radek.Substring(0, 4) == "spo:") // Jestliže je na začátku řádku spo: tak je to info, zda se má Úkolník automaticky spouštět při startu počítače { NastavSpousteni(radek.Remove(0, 5)); // Odtrhneme začátek a získáme tak, zda se má Úkolník automaticky spouštět při startu počítače } else if (radek.Substring(0, 4) == "upo:") // Jestliže je na začátku řádku upo: tak je to o kolik minut předem se má upozorňovat na události { try { UpozorneniDopredu = Convert.ToInt32(radek.Remove(0, 5)); // Zkusíme odtrhnutím začátku a převodu na číslo získat o kolik minut dřív se má upozorňovat na události } catch (Exception exc) // Pokud nastal problém a zadaná hodnota nelze předělat na číslo, tak se nastaví záklandí hodnota a vypíše se info o tomto problému { UpozorneniDopredu = 7; Vyjimky.VypisVyjimek("Chyba konfiguračním souboru, je zadána špatná hodnota pro upozornění, běž do nastavení a ulož tam novou.", exc); } } else if (radek.Substring(0, 4) == "pod:") // Jestliže je na začátku řádku pod: tak je to info o tom, zda se mají zobrazovat podrobnosti u vyjimek { NastavPodrobnostiVyjimek(radek.Remove(0, 5)); // Odtrhneme začátek a a předáme ho funkci na nastavení podrobností u výpisu vyjimek } } soubor.Close(); // Zavřeme konfigurák return(Verze == Obecne.DejVerzi()); }
/// <summary> /// Obsluha události pokusu o zavření Hlavního okna, kdy uživatel musí potvrdit zavření hlavního okna (tím pádem i Úkolníku) /// </summary> private void HlavniOkno_FormClosing(object sender, FormClosingEventArgs e) { if (Nastaveni.StavAplikace == (int)Nastaveni.StavyAplikace.bezici && e.CloseReason.ToString() == "UserClosing") // Zavírá uživatel? (Například když OS zavírá při vypínání, tak by to neuměl ukončit bez pomoci) { DialogResult odpoved = Obecne.ZobrazZpravu("Opravdu chceš ukončit Úkolník?", "Opravdu to chceš?", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (odpoved == System.Windows.Forms.DialogResult.No) // Nechce zavřít okno, takže to zrušíme { e.Cancel = true; return; } } alarm.Vypnout(); // Vypneme alarm, už nebude třeba Obecne.ZmenaVeSvatcich -= AktualizujSvatky; Obecne.ZmenaVUdalostech -= AktualizujKalendarNasilne; }
/// <summary> /// Po stisknutí levého tlačítka na popisku se otevře okno se zobrazením události /// </summary> private void labelUdalost_Click(object sender, EventArgs e) { if (((MouseEventArgs)e).Button == System.Windows.Forms.MouseButtons.Left) { udalost = ((Label)sender).Tag.ToString(); if (udalost != "-1") // Je to událost nebo jen informační popisek? { Podrobnosti okno = new Podrobnosti(udalost); okno.StartPosition = FormStartPosition.Manual; int x = this.ParentForm.Location.X + this.Location.X + ((MouseEventArgs)e).Location.X + ((Label)sender).Location.X; // Spočítáme X souřadnici na obrazovce tak, že získáme souřadnice nadřazených objektů a sečteme je int y = this.ParentForm.Location.Y + this.Location.Y + ((MouseEventArgs)e).Location.Y + ((Label)sender).Location.Y; // Spočítáme Y souřadnici na obrazovce tak, že získáme souřadnice nadřazených objektů a sečteme je okno.Location = Obecne.UmisteniOkna(new System.Drawing.Point(x, y), okno.Size, 0); okno.Show(); } } }
/// <summary> /// Obsluha kliknutí, kdy bude splněno nebo nesplněna událost, ke které patří tento PictureBox /// </summary> private void PictureBoxSplneno_Click(object sender, EventArgs e) { Databaze db = new Databaze(); string splneno; if ((string)((PictureBox)sender).Image.Tag == "fajfka") // Pokud tam byl obrázek fajfky, tak daná událost byla splněna kliknutím, v opačném případě byla nesplněna { splneno = "1"; } else { splneno = "0"; } db.Dotaz("UPDATE udalosti SET Splneno=" + splneno + " WHERE id=" + ((PictureBox)sender).Tag + ";"); // Provedeme změnu splněnosti pro danou událost db.Close(); Obecne.OnZmenaVUdalostech(); // Je potřeba znovu načíst události }
/// <summary> /// Provede odeslání souboru s chybama na web /// </summary> public static void OdesliChybovySoubor() { if (System.IO.File.Exists(Nastaveni.SlozkaNastaveni + SouborChyb) == false) // Pokud soubor s chybama neexistuje, tak pak není co odesílat { return; } System.IO.StreamReader soubor = new System.IO.StreamReader(SlozkaNastaveni + SouborChyb); // Otevře soubor s chybama System.Security.Cryptography.MD5 hash = System.Security.Cryptography.MD5.Create(); // Připravíme hash pro identifikaci, zda chyba vzniká na jendom a tom samém počítači nebo na různých počítačích byte[] zahashovano = hash.ComputeHash(System.Text.Encoding.UTF8.GetBytes(System.Environment.UserName + System.Environment.MachineName)); // Hash bude z uživatelského jména a jména počítače if (Obecne.PosliDataNaWeb("aplikace=ukolnik&identifikace=" + Convert.ToBase64String(zahashovano) + "&system=" + System.Environment.OSVersion.ToString() + "&chyby=" + Obecne.OdstranProblemoveHTTPPOSTZnaky(soubor.ReadToEnd()), "http://sqee.eu/programy/ukolnik/formular.php", false) == "DONE") // Na web se odešlou data obsahující indentifikaci, OS a chyby (ze kterých byly odstraněny nevhodné znaky), pokud to proběhlo v pořádku, tak se soubor s chybama smaže, v opačném případě bude ponechán na příště { soubor.Close(); System.IO.File.Delete(Nastaveni.SlozkaNastaveni + SouborChyb); } else { soubor.Close(); } }
/// <summary> /// Obsluha události kliknutí na ikonku Úkolníku, tedy minimalizaci Úkolníku nebo přenos Úkolníku do popředí /// </summary> private void notifyIcon_MouseClick(object sender, MouseEventArgs e) { if (Obecne.IkonaAktivni() == false) // Pokud je deaktivovaná nabídka, tak ikona nereaguje ani na kliknutí, aby se nedal obejít dialog { return; } if (e.Button == MouseButtons.Left) // Zda to bylo levé tlačítko, pravé tlačítko slouží pro zobrazení nabídky { if (this.WindowState == FormWindowState.Minimized) // Zda je Úkolník minimalizovaný, pokud ano, tak zobrazit ho na liště a dát do popředí, v opačném případě minimalizovat { this.ShowInTaskbar = true; this.WindowState = FormWindowState.Normal; } else { this.WindowState = FormWindowState.Minimized; } } }
/// <summary> /// Provede zobrazení upozornění na události, kde už je čas /// </summary> private void ZobrazAlarmy() { lock (this) // Po probuzení ze spánku by mohlo být trošku víc alarmů { Databaze db = new Databaze(); db.Dotaz("SELECT ID FROM udalosti WHERE (Upozorneno=" + ((int)Obecne.UpozorneniTypy.upozornitAutomaticky).ToString() + " OR Upozorneno=" + ((int)Obecne.UpozorneniTypy.upozornitVlastni).ToString() + ") AND Upozorneni<=NOW() AND (Splneno=0 OR Typ=" + ((int)Obecne.UdalostiTypy.narozeniny).ToString() + ") ORDER BY Upozorneni ASC;"); // Vytáhne události, na které se má upozornit a nebylo na ně už upozorněno a také nejsou ještě splněny (splněnost v případě narozenin je ignorována, protože je využívána k přechodu na další rok), tahá je v pořadí od nejstaršího dle doby upozornění while (db.DalsiVysledek()) { Obecne.IkonaStav(false); // Aby se nedal obejít dialog ikonkou Upozorneni alarm = new Upozorneni(db.DejVysledekInt("ID")); // Předá se upozorněnímu ID události if (DialogResult.Yes == alarm.ShowDialog()) // Pokud bylo při upozornění kliknuto na splněno, tak dojde k aktualizaci událostí { Obecne.OnZmenaVUdalostech(); } Obecne.IkonaStav(true); } db.Close(); } }
/// <summary> /// Obsluha kliknutí, kdy bude deaktivována ikona a vyvolán dialog úpravy události /// </summary> private void PictureBoxUprava_Click(object sender, EventArgs e) { Obecne.IkonaStav(false); // Vypneme ikonu, aby nešlo obejít dialog Uprava okno = new Uprava(Convert.ToInt32(((PictureBox)sender).Tag)); // Vytvoříme úpravu události, ke které byl svázán kliknutý PictureBox okno.StartPosition = FormStartPosition.Manual; int x = this.Parent.Parent.Parent.Location.X + this.Parent.Parent.Location.X + this.Parent.Location.X + this.Location.X; // Vypočítá se X souřadnice pro zobrazení okna int y = this.Parent.Parent.Parent.Location.Y + this.Parent.Parent.Location.Y + this.Parent.Location.Y + this.Location.Y; // Vypočítá se Y souřadnice pro zobrazení okna okno.Location = Obecne.UmisteniOkna(new System.Drawing.Point(x, y), okno.Size, 0, 0); okno.ShowDialog(); if (okno.DialogResult == DialogResult.Yes) // Pokud bylo něco upraveno, tak je třeba znovunačíst události, pokud to byly narozeniny tak i svátky { Obecne.OnZmenaVUdalostech(); if (okno.Typ == ((int)Obecne.UdalostiTypy.narozeniny)) { Obecne.OnZmenaVeSvatcich(); } } Obecne.IkonaStav(true); // Opět zapneme ikonu }
/// <summary> /// Provede načtení narozenin a zobrazení kolik je komu roků /// </summary> private void NactiNarozeniny() { Obecne.PripravNarozeninyPrehled(); // Připraví narozeniny, aby seděli roky richTextBoxNarozeniny.Text = ""; // Vymažeme dosavadní seznam narozenin Databaze db = new Databaze(); db.Dotaz("SELECT Kdy, Nadpis, Zprava, Splneno FROM udalosti WHERE Typ=" + ((int)Obecne.UdalostiTypy.narozeniny).ToString() + " ORDER BY Nadpis;"); // Získá seznam lidí, kteří maj zadané narozeniny a zobrazí je i kolik jim je while (db.DalsiVysledek()) { richTextBoxNarozeniny.Text += db.DejVysledekString("Nadpis") + " " + db.DejVysledekDatumCas("Kdy").ToString("d.M") + "." + db.DejVysledekString("Zprava") + " (" + (DateTime.Today.Year - db.DejVysledekInt("Zprava") + -1 + db.DejVysledekInt("Splneno") + Convert.ToInt32(DateTime.Today.Day == db.DejVysledekDatumCas("Kdy").Day&& DateTime.Today.Month == db.DejVysledekDatumCas("Kdy").Month)).ToString() + ")\n"; } db.Close(); if (richTextBoxNarozeniny.Text != "") // Pokud je zobrazení narozeniny neprázdné, tak odstraníme koncový nový řádek, jinak napíšeme info o nulovém počtu narozenin { richTextBoxNarozeniny.Text = richTextBoxNarozeniny.Text.Remove(richTextBoxNarozeniny.TextLength - 1); } else { richTextBoxNarozeniny.Text = "Zatím nebyly zadány žádné narozeniny"; } }
static void Main() { bool prvniOtevreni; // Zda je toto první otevření Úkolníku nebo už je otevřen System.Threading.Mutex m = new System.Threading.Mutex(true, "Ukolnik", out prvniOtevreni); if (prvniOtevreni == false) // Pokud to není první otevření tak zobrazíme info, získáme proces již běžícího Úkolníku, získáme aktvní okno a to se pokusíme přenést do popředí { Obecne.ZobrazZpravu("Úkolník je již spuštěn.", "Vícenásobné spuštění není dovoleno", MessageBoxButtons.OK, MessageBoxIcon.Information); System.Diagnostics.Process[] procesy = System.Diagnostics.Process.GetProcessesByName("Ukolnik"); SetForegroundWindow(procesy[0].MainWindowHandle); return; } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Nastaveni.NastavStavAplikace((int)Nastaveni.StavyAplikace.bezici); // Úkolník běží normálně Nastaveni.NastaveniOtevreno = false; // Nastavovací okno nebylo otevřeno Application.Run(new Start()); // Spustíme startovací okno, kde se provedou nezbytné věci if (Nastaveni.StavAplikace == (int)Nastaveni.StavyAplikace.bezici) // Pokud je vše v pořádku, tak se spustí okno s přehledem a po jeho zavření již hlavní okno { Application.Run(new Prehled(true)); Application.Run(new HlavniOkno()); } }
/// <summary> /// Aktualizuje svátky a samotný timer /// </summary> private void timer_Tick(object sender, EventArgs e) { AktualizujSvatky(); Obecne.PripravNarozeninyPrehled(); strankaNarozeniny.NactiData(); }
/// <summary> /// Provádí jednotlivé akce a zobrazuje postup /// </summary> private void Start_Load(object sender, EventArgs e) { Nastaveni.NastavPodrobnostiVyjimek(true); // V tuto chvíli nejsou načteny data z konfiguráku, takže je zapnuto vypisování vyjímek if (System.IO.Directory.Exists(Nastaveni.SlozkaNastaveni) == false) // Existuje složka, kde má být uložen konfigurák? Pokud ne, tak se pokusí vytvořit { try { System.IO.Directory.CreateDirectory(Nastaveni.SlozkaNastaveni); } catch (Exception exc) { Vyjimky.VypisVyjimek("Nepodařilo se vytvořit tuto cestu: " + Nastaveni.SlozkaNastaveni, exc); Nastaveni.NastavStavAplikace((int)Nastaveni.StavyAplikace.koncici); // Vynucené okamžité ukončení aplikace this.Close(); return; } } if (System.IO.File.Exists(Nastaveni.SlozkaNastaveni + Nastaveni.SouborNastaveni) == false) // Existuje konfigurák? Pokud ne, tak ho vytvořit (v té době je ochrana proti zobrazování chyb), pokud ano, tak ho přečíst { try { Nastaveni.PraveVytvorenKonfigurak = true; Nastaveni.VytvorNastaveni(); } catch (Exception exc) { Vyjimky.VypisVyjimek("Nepodařilo se vytvořit konfigurační soubor v této složce: \n" + Nastaveni.SlozkaNastaveni, exc); Nastaveni.NastavStavAplikace((int)Nastaveni.StavyAplikace.koncici); // Vynucené okamžité ukončení aplikace this.Close(); return; } } else { if (Nastaveni.CtiNastaveni() == false) { if (DialogResult.Abort == new Aktualizace().ShowDialog()) // Zda nedošlo k chybě při aktualizaci { Obecne.ZobrazZpravu("Nezdařila se konfigurace aplikace po provedení aktualizace, aplikace nemůže dál pokračovat a bude tudíž ukončena. Opětovné spuštění by mělo problém vyřešit. Pokud ne, tak jsou na vině internetové problémy, které snad brzo budou vyřešeny.", "Problém s konfigurací", MessageBoxButtons.OK, MessageBoxIcon.Error); Nastaveni.NastavStavAplikace((int)Nastaveni.StavyAplikace.koncici); this.Close(); return; } } } progressBarStart.Value += 1; if (Nastaveni.StavAplikace != (int)Nastaveni.StavyAplikace.bezici) // Pokud nastala chyba při čtení konfiguráku { this.Close(); return; } new System.Threading.Thread(Nastaveni.OdesliChybovySoubor).Start(); // Pokusí se odeslat soubor s chybama - má vlastní vlákno, aby nezdržovalo start aplikace progressBarStart.Value += 1; Databaze db = new Databaze(); db.Dotaz("UPDATE udalosti SET Splneno=1 WHERE Splneno=0 AND Typ=" + ((int)Obecne.UdalostiTypy.udalost).ToString() + " AND Kdy <= NOW();"); // Staré události automaticky splnění (když se mělo něco udát, tak se to událo) progressBarStart.Value += 1; alarm.AlarmKontrola(); // Aktivuje alarm, aby se upozornilo na případné blížící se události progressBarStart.Value += 1; db.Dotaz("SELECT COUNT(*) as Pocet FROM udalosti WHERE Splneno=0 AND Typ=" + ((int)Obecne.UdalostiTypy.ukol).ToString() + " AND Kdy <= NOW();"); // Získá nesplněné úkoly, který už měly být splněny while (db.DalsiVysledek()) { if (db.DejVysledekInt("Pocet") > 0) // Pokud jsou nesplněné úkoly, které měly být splněny, tak se zobrazé dialog s jejich výpisem { StareUdalosti okno = new StareUdalosti((int)Obecne.UdalostiTypy.ukol); okno.ShowDialog(); } } progressBarStart.Value += 1; db.Dotaz("SELECT COUNT(*) as Pocet FROM udalosti WHERE Splneno=0 AND Typ=" + ((int)Obecne.UdalostiTypy.pisemka).ToString() + " AND Kdy <= NOW();"); // Získá nesplněné písemky, který už měly být splněny while (db.DalsiVysledek()) { if (db.DejVysledekInt("Pocet") > 0) // Pokud jsou nesplněné písemky, které měly být splněny, tak se zobrazé dialog s jejich výpisem { StareUdalosti okno = new StareUdalosti((int)Obecne.UdalostiTypy.pisemka); okno.ShowDialog(); } } progressBarStart.Value += 1; Obecne.PametNadpis = new AutoCompleteStringCollection(); // Vytvoříme novou nápovědní kolekci nadpisů db.Dotaz("SELECT DISTINCT Nadpis FROM udalosti;"); // Získáme unikátní nadpisy a ty postupně přidáváme do kolekce while (db.DalsiVysledek()) { Obecne.PametNadpis.Add(db.DejVysledekString("Nadpis")); } progressBarStart.Value += 1; db.Close(); // Zavře databázové spojení, uvolní zdroje Obecne.PripravNarozeninyPrehled(); // Připravíme narozeniny pro zobrazení (aby seděly přechody roků) alarm.Vypnout(); // Vypne upozorňování na blížíce se události progressBarStart.Value += 1; this.Close(); // Zavře okno }
/// <summary> /// Pokud byla v nabídce vybrána možnost posunu události, tak se ten posun provede /// </summary> private void toolStripMenuItemPosunoutUdalost_Click(object sender, EventArgs e) { Obecne.PresunUdalost(udalost, typ, ((ToolStripMenuItem)sender).Tag.ToString()); }
/// <summary> /// Pokud bylo kliknuto na uložit, tka je třeba data uložit, uloží se vše, nesledují se změny /// </summary> private void buttonUlozit_Click(object sender, EventArgs e) { if (textBoxNadpis.Text == "") // Zda není prázdný nadpis (nebo jméno), protože to není dovolené { Obecne.ZobrazZpravu("Nadpis (nebo jméno) nemůže být prázdný!", "Pozor", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (comboBoxTyp.SelectedIndex == (int)Obecne.UdalostiTypy.narozeniny) // Pokud jsou vybrány narozeniny { try { int rokNarozeni = Convert.ToInt32(textBoxZprava.Text); // Pokusíme se získat rok narození z textu, přinejhorším vyhodíme vyjimku rokNarozeni = Math.Abs(rokNarozeni); // Záp**né roky nebereme textBoxZprava.Text = rokNarozeni.ToString(); // Upravený rok narození vložíme zpátky do Zprávy } catch // Pokud se převod nezdařil, tak se zobrazí info o tom { Obecne.ZobrazZpravu("Nebyl zadán platný rok narození!", "Pozor", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } alarm.Vypnout(); // Vypne se alarm, protože nyní už to nemá co zastavit to ukládání string nadpis = textBoxNadpis.Text; nadpis = Obecne.OdstranProblemoveZnaky(nadpis); // Odstraníme znaky z nadpisu, jen ty které by mohly dělat problémy, případně je nahradíme vhodnějšími string zprava = textBoxZprava.Text; zprava = Obecne.OdstranProblemoveZnaky(zprava); // Odstraníme znaky z textu, jen ty které by mohly dělat problémy, případně je nahradíme vhodnějšími int hodiny; int minuty; if (comboBoxTyp.SelectedIndex != (int)Obecne.UdalostiTypy.narozeniny) // Pokud nejsou narozeniny, tak se pokusíme získat čas konání { try { hodiny = Convert.ToInt32(textBoxCasHodina.Text); // Pokusíme se získat z textu hodinu konání hodiny = hodiny % 24; // Převedeme ji na normální rozmezí } catch { hodiny = 0; // Když se nám převod nezdařil, tak hodin bude nula } try { minuty = Convert.ToInt32(textBoxCasMinuta.Text); // Pokusíme se získat z textu minutu konání minuty = minuty % 60; // Převedeme ji na normální rozmezí } catch { minuty = 0; // Když se nám převod nezdařil, tak minut bude nula } } else // Pro narozeniny bude nula minut a nula hodin { hodiny = 0; minuty = 0; } if (hodiny < 0) // Hodiny nemohou být záp**né, takže budou nejméně nula { hodiny = 0; } if (minuty < 0) // Ani minuty nemohou být záp**né, takže budou také nejméně nula { minuty = 0; } monthCalendar.SelectionStart = monthCalendar.SelectionStart.AddHours(hodiny); // Získané hodiny zaznamenáme do kalendáře monthCalendar.SelectionStart = monthCalendar.SelectionStart.AddMinutes(minuty); // Získané minuty zaznamenáme do kalendáře DateTime upozorneni; if (radioButtonVlastni.Checked == true) // Pokud si chce sám zvolit dobu upozornění { upozorneni = new DateTime(dateTimePickerUpozorneni.Value.Year, dateTimePickerUpozorneni.Value.Month, dateTimePickerUpozorneni.Value.Day, 0, 0, 0); // Získáme ji z dateTimePickeru try { hodiny = Convert.ToInt32(textBoxCasHodinaUpozorneni.Text); // Pokusíme se získat z textu hodiny if (hodiny < 0) // Hodiny nesmějí být záp**né, nejméně nulové musejí být { hodiny = 0; } hodiny = hodiny % 24; // Také by mělý být ve správném rozmezí minuty = Convert.ToInt32(textBoxCasMinutaUpozorneni.Text); // Pokusíme se získat z textu minuty if (minuty < 0) // Minuty nesmějí být záp**né, nejméně nulové musejí být { minuty = 0; } minuty = minuty % 60; // Také by měly být ve správném rozmezí } catch // Když se nějaký převod nepovedl, tak hodiny nastavíme na nula, minuty dle upozornění dopředu (ale záp**né, aby se dobře odečítaly od doby konání), upozornění se bude čerpat z doby konání { hodiny = 0; minuty = Nastaveni.UpozorneniDopredu * -1; upozorneni = new DateTime(monthCalendar.SelectionStart.Year, monthCalendar.SelectionStart.Month, monthCalendar.SelectionStart.Day, monthCalendar.SelectionStart.Hour, monthCalendar.SelectionStart.Minute, monthCalendar.SelectionStart.Second); // Získáme dobu konání } } else // Pokud chceme automatické upozornění { upozorneni = new DateTime(monthCalendar.SelectionStart.Year, monthCalendar.SelectionStart.Month, monthCalendar.SelectionStart.Day, monthCalendar.SelectionStart.Hour, monthCalendar.SelectionStart.Minute, monthCalendar.SelectionStart.Second); // Získáme dobu konání hodiny = 0; // S hodinami nebudeme hýbat minuty = Nastaveni.UpozorneniDopredu * -1; // Minuty budou mít automatickou hodnotu dle Upozornění dopředu a zápornou pro lepší odečítání } upozorneni = upozorneni.AddHours(hodiny); // K době upozornění přidáme hodiny upozorneni = upozorneni.AddMinutes(minuty); // K době upozornění přidáme minuty if (upozorneni > monthCalendar.SelectionStart) // Pokud by doba upozornění byla až po události, tak jí nastavíme automaticky před událost { upozorneni = new DateTime(monthCalendar.SelectionStart.Year, monthCalendar.SelectionStart.Month, monthCalendar.SelectionStart.Day, monthCalendar.SelectionStart.Hour, monthCalendar.SelectionStart.Minute, monthCalendar.SelectionStart.Second); upozorneni = upozorneni.AddMinutes(Nastaveni.UpozorneniDopredu * -1); } string upozornit; if (radioButtonVlastni.Checked == true) // Je zvoleno vlastní upozornění? { if (upozorneni <= DateTime.Now) // Pokud už to upozornění mělo proběhnout, tak se nastaví jako proběhlé, jinak jako vlastní neproběhlé { upozornit = ((int)Obecne.UpozorneniTypy.upozornenoVlastni).ToString(); } else { upozornit = ((int)Obecne.UpozorneniTypy.upozornitVlastni).ToString(); } } else if (radioButtonAno.Checked == true) { if (upozorneni <= DateTime.Now) // Pokud už to upozornění mělo proběhnout, tak se nastaví jako proběhlé, jinak jako automatické neproběhlé { upozornit = ((int)Obecne.UpozorneniTypy.upozornenoAutomaticky).ToString(); } else { upozornit = ((int)Obecne.UpozorneniTypy.upozornitAutomaticky).ToString(); } } else // Je zvoleno neupozorňovat? Tak se nastaví neupozorňování { upozornit = ((int)Obecne.UpozorneniTypy.neupozornit).ToString(); } if (upozorneni.Year < dateTimePickerUpozorneni.MinDate.Year) // Pokud by byla událost na hranici zobrazení dateTimePickeru, tak automatické upozornění by mohlo způsobit, že by při úpravě hlásil neplatnost data dateTimePicker, takže datum dostaneme do požadovaného rozmezí { upozorneni = upozorneni.AddYears(dateTimePickerUpozorneni.MinDate.Year - upozorneni.Year); } Databaze db = new Databaze(); if (Nadpis != textBoxNadpis.Text) // Pokud se předchozí nadpis neshoduje s novým, tak zjišťujeme, jestli starý nadpis používala i jiný událost, pokud nepoužívala, tak starý nadpis je smazán z kolekce, pak také se zjišťuje, zda nový nadpis byl používán jinou událostí, pokud nebyl, tak se vloží do kolekce { db.Dotaz("SELECT COUNT(*) AS Pocet FROM udalosti WHERE Nadpis='" + Nadpis + "';"); while (db.DalsiVysledek()) { if (db.DejVysledekInt("Pocet") < 2) { Obecne.PametNadpis.Remove(Nadpis); } } db.Dotaz("SELECT COUNT(*) AS Pocet FROM udalosti WHERE Nadpis='" + textBoxNadpis.Text + "';"); while (db.DalsiVysledek()) { if (db.DejVysledekInt("Pocet") == 0) { Obecne.PametNadpis.Add(textBoxNadpis.Text); } } } if (comboBoxTyp.SelectedIndex == (int)Obecne.UdalostiTypy.narozeniny) // Pokud ukládáme narozeniny, tak se nastaví rok 4 { monthCalendar.SelectionStart = monthCalendar.SelectionStart.AddYears(4 - monthCalendar.SelectionStart.Year); } db.Dotaz("UPDATE udalosti SET Typ=" + comboBoxTyp.SelectedIndex.ToString() + ", Nadpis='" + nadpis + "', Zprava='" + zprava + "', Kdy='" + monthCalendar.SelectionStart.ToString("yyyy-MM-dd HH:mm:ss") + "', Splneno=" + comboBoxSplneno.SelectedIndex.ToString() + ", Upozorneno=" + upozornit + ", Upozorneni='" + upozorneni.ToString("yyyy-MM-dd HH:mm:ss") + "' WHERE ID=" + Udalost.ToString() + ";"); // Všechno to uložíme db.Close(); if (comboBoxTyp.SelectedIndex == ((int)Obecne.UdalostiTypy.narozeniny)) // Pokud je nově upravená událost narozeninama, tak si to uložíme (ukládáme jen pro případ narozenin, protože ta stará mohla být narozeniny, ale byl jí změněn typ na něco jinýho, ale i tak je třeba udělat aktualizaci svátků) { Typ = (int)Obecne.UdalostiTypy.narozeniny; } this.DialogResult = System.Windows.Forms.DialogResult.Yes; // Nastavíme Yes, protože došlo ke změně události this.Close(); }
/// <summary> /// Nastaví verzi na aktuální verzi aplikace /// </summary> public static void NastavAktualniVerzi() { Verze = Obecne.DejVerzi(); }