/// <summary> /// Jakmile se nastavovací okno zavírá, tak se indikuje, že už není zobrazeno a tak se může zobrazit další nastavovací okno v případě potřeby, taky se kontroluje, zda nebylo okno zobrazeno z důvodu chyb, pokud ano, tak dojde k ukončení aplikace /// </summary> private void NastavovaciOkno_FormClosing(object sender, FormClosingEventArgs e) { Nastaveni.NastaveniOtevreno = false; if (this.DialogResult != System.Windows.Forms.DialogResult.Yes && Chyba == true) { Nastaveni.NastavStavAplikace((int)Nastaveni.StavyAplikace.koncici); } }
/// <summary> /// Zkontroluje, zda už vše bylo provedeno, pokud ano, tak se provede dokončení /// </summary> private void HotovoAkce() { if (progressBarKonfigurace.Value == progressBarKonfigurace.Maximum - 1) // Zda je vše provedeno (tedy kromě posledního kroku - uložení aktuální verze) { Nastaveni.NastavAktualniVerzi(); // Získáme aktuální verzi Nastaveni.UlozNastaveni(); // Uložíme aktuální verzi, aby pak nedocházelo k aktualizaci při dalším spuštění progressBarKonfigurace.PerformStep(); labelStav.Text = "Hotovo"; // Označíme stav jako hotovo a povolíme tlačítka buttonPokracovat.Enabled = true; this.ControlBox = true; } }
/// <summary> /// /// </summary> private void NainstalujAktualizaci() { UpdateCheckInfo info = null; if (ApplicationDeployment.IsNetworkDeployed) { ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment; try { info = ad.CheckForDetailedUpdate(); } catch (DeploymentDownloadException exc) { Vyjimky.VypisVyjimek("Nepodařilo se stáhnout novou verzi. Zkontroluj připojení k internetu", exc); return; } catch (InvalidDeploymentException exc) { Vyjimky.VypisVyjimek("Nepodařilo se stáhnout novou verzi.", exc); Nastaveni.ZapisChybovySoubor(DateTime.Now.ToString("d.M.yyyy H:mm:ss") + ": Chybně sestavený soubor (deployment). Detaily: " + exc.Message); return; } catch (InvalidOperationException exc) { Vyjimky.VypisVyjimek("Nepodařilo se aktualizovat novou verzi.", exc); Nastaveni.ZapisChybovySoubor(DateTime.Now.ToString("d.M.yyyy H:mm:ss") + ": Nezdařená aktualizace. Detaily: " + exc.Message); return; } if (info.UpdateAvailable) { MessageBox.Show("Byla nalezena aktualizace a nyní bude provedena její instalace.", "Aktualizace k dispozici", MessageBoxButtons.OK, MessageBoxIcon.Information); try { ad.Update(); MessageBox.Show("Aplikace byla aktualizována a nyní bude restartována."); Nastaveni.NastavStavAplikace((int)Nastaveni.StavyAplikace.koncici); // Vynucené okamžité ukončení aplikace Application.Restart(); this.Close(); return; } catch (DeploymentDownloadException exc) { Vyjimky.VypisVyjimek("Nepodařilo se nainstalovat aktualizaci. Zkontorluj si připojení k internetu nebo zkus později", exc); return; } } } }
/// <summary> /// Při stisku tlačítka uložit provedeme uložení nastavení /// </summary> private void buttonUlozit_Click(object sender, EventArgs e) { if (Problemu == 0) // Pokud je vše OK, tak pokračujeme { int upozornit = Convert.ToInt32(textBoxMinuty.Text) + Convert.ToInt32(textBoxHodiny.Text) * 60 + Convert.ToInt32(textBoxDny.Text) * 1440; // Spočítáme kolik minut to je to automatické upozornění dopředu bool spousteni = true; if (comboBoxSpousteni.SelectedIndex == 1) // Pokud nebylo vybráno automatické spouštění při startu počítače, tak se vypne spouštění, jinak se ponechá zaplé { spousteni = false; } bool vypisy = true; if (comboBoxChyby.SelectedIndex == 1) // Pokud nebyly vybrány podrobné popisy vyjimek, tak se nebudou zobrazovat, jinak se ponechá jejich zobrazování { vypisy = false; } Databaze db = new Databaze(textBoxServer.Text, textBoxUzivatel.Text, textBoxHeslo.Text, textBoxDatabaze.Text); // Testovací připojení k databázi s nově nastavenými hodnotami db.Dotaz("SHOW TABLES"); // Slouží jako testovací příkaz zda bylo vše dobře zadáno (pokud totiž by bylo prázdné uživatelské jméno a heslo, tak nás to nechá připojit, ale nefungují dotazy) if (db.DejVysledku() == -1) // Připojení se nezdařilo { return; } db.Dotaz(Ukolnik.Properties.Resources.create); // Vytvoříme tabulky (pouze pokud už nebyly vytvořeny) db.Dotaz("SELECT COUNT(*) AS Pocet FROM svatky;"); // Zkontrolujeme, zda tabulka se svátky není prázdná, pokud je, tak ji naplníme while (db.DalsiVysledek()) { if (db.DejVysledekInt("Pocet") == 0) { db.Dotaz(Ukolnik.Properties.Resources.svatky); } } db.Dotaz("SELECT COUNT(*) AS Pocet FROM vyznamne_dny;"); // Zkontrolujeme, zda tabulka s významnými dny není prázdná, pokud je, tak ji naplníme while (db.DalsiVysledek()) { if (db.DejVysledekInt("Pocet") == 0) { db.Dotaz(Ukolnik.Properties.Resources.vyznamne_dny); } } Nastaveni.UpravNastaveni(textBoxServer.Text, textBoxUzivatel.Text, textBoxHeslo.Text, textBoxDatabaze.Text, spousteni, upozornit, vypisy); // Když vše dobře proběhlo, tak si nové připojovací údaje uložíme interně Nastaveni.UlozNastaveni(); // A taky do konfiguráku se to uloží Nastaveni.OnZmenaPripojeni(); // Vyvoláme nucenou změnu připojení u všech již otevřených spojeních s databází Chyba = false; // Chyba byla zažehnána DialogResult = System.Windows.Forms.DialogResult.Yes; // Signalizace úspěchu db.Close(); // Zvařeme spojení s databází } }
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> /// 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> /// V menu byla vybrána volba Konec, takže Úkolník bude ukončen /// </summary> private void MoznostKonec_Click(object sender, EventArgs e) { Nastaveni.NastavStavAplikace((int)Nastaveni.StavyAplikace.koncici); // Pozastavit probíhající věci Application.Exit(); }