public void obrisiPolje(string id, string oznakaPredmeta) { // pamtimo stanje alikacije pre nego sto uradimo dodavanje novog StanjeAplikacije staroStanje = new StanjeAplikacije(); staroStanje.RacunarskiCentar = DeepClone(racunarskiCentar); staroStanje.TipPodataka = "kalendar"; staroStanje.Kolicina = 1; staroStanje.TipPromene = "dodavanje"; racunarskiCentar.Predmeti[oznakaPredmeta].PreostaliTermini++; racunarskiCentar.PoljaKalendara.Remove(id); // na undo stek treba da upisemo staro stanje aplikacije // generisemo neki novi kljuc pod kojim cemo cuvati prethodno stanje na steku string kljuc = Guid.NewGuid().ToString(); // proveravamo da li vec ima 10 koraka za undo operaciju, ako ima, izbacujemo prvi koji je ubacen kako bismo // i dalje imali 10 mogucih koraka, ali ukljucujuci i ovaj novi if (prethodnaStanjaAplikacije.Count >= 2) { prethodnaStanjaAplikacije.RemoveAt(0); } prethodnaStanjaAplikacije.Add(kljuc, staroStanje); stekStanja.GetUndo().Push(kljuc); // omogucavamo pozivanje opcije undo Application.Current.Dispatcher.Invoke(() => { _instanceWindow.omoguciUndo(); }); }
private bool validacijaNovogSoftvera() { if (!validacijaPodataka()) { return(false); } else if (racunarskiCentar.Softveri.ContainsKey(oznakaSoftver.Text.Trim())) { if (racunarskiCentar.Softveri[oznakaSoftver.Text.Trim()].Obrisan) { dodavanjeSoftveraIzborStarogUnosa = false; Softver softver = racunarskiCentar.Softveri[oznakaSoftver.Text.Trim()]; // vec postoji softver sa tom oznakom, ali je logicki obrisan OdlukaDodavanjaSoftver odluka = new OdlukaDodavanjaSoftver(); odluka.Oznaka.Text = "Oznaka: " + softver.Oznaka; odluka.Naziv.Text = "Naziv: " + softver.Naziv; odluka.OperativniSistem.Text = "Operativni sistem: " + softver.OperativniSistem; odluka.Proizvodjac.Text = "Proizvođač: " + softver.Proizvodjac; odluka.GodinaIzdavanja.Text = "Godina izdavanja: " + softver.GodIzdavanja.ToString(); odluka.Sajt.Text = "Sajt: " + softver.Sajt; odluka.Cena.Text = "Cena: " + softver.Cena.ToString(); odluka.ShowDialog(); if (odluka.potvrdaNovogUnosa) { // ukoliko je korisnik potvrdio da zeli da unese nove podatke, gazimo postojeci neaktivan softver racunarskiCentar.Softveri.Remove(oznakaSoftver.Text.Trim()); } else { // pamtimo stanje alikacije pre nego sto uradimo dodavanje novog staroStanje = new StanjeAplikacije(); staroStanje.RacunarskiCentar = DeepClone(racunarskiCentar); staroStanje.TipPodataka = "softver"; staroStanje.Kolicina = 1; staroStanje.TipPromene = "brisanje"; staroStanje.Oznake.Add(softver.Oznaka); // vracamo logicki obrisan softver da bude aktivan softver.Obrisan = false; dodavanjeSoftveraIzborStarogUnosa = true; } } else { Application.Current.Dispatcher.Invoke(() => { notifierError.ShowError("Softver sa unetom oznakom već postoji!"); }); vratiNaKorak1(); UpdateLayout(); oznakaSoftver.Focus(); return(false); } } return(true); }
private bool validacijaNoveUcionice() { if (!validacijaPodataka()) { return(false); } else if (racunarskiCentar.Ucionice.ContainsKey(oznakaUcionica.Text.Trim())) { if (racunarskiCentar.Ucionice[oznakaUcionica.Text.Trim()].Obrisan) { dodavanjeUcioniceIzborStarogUnosa = false; Ucionica ucionica = racunarskiCentar.Ucionice[oznakaUcionica.Text.Trim()]; // vec postoji ucionica sa tom oznakom, ali je logicki obrisana OdlukaDodavanjaUcionica odluka = new OdlukaDodavanjaUcionica(); odluka.Oznaka.Text = "Oznaka: " + ucionica.Oznaka; odluka.BrojRadnihMesta.Text = "Broj radnih mesta: " + ucionica.BrojRadnihMesta; odluka.Projektor.Text = "Projektor: " + ucionica.ProjektorString; odluka.Tabla.Text = "Tabla: " + ucionica.TablaString; odluka.PametnaTabla.Text = "Pametna tabla: " + ucionica.PametnaTablaString; odluka.OperativniSistem.Text = "Operativni sistem: " + ucionica.OperativniSistem; odluka.ShowDialog(); if (odluka.potvrdaNovogUnosa) { // ukoliko je korisnik potvrdio da zeli da unese nove podatke, gazimo postojecu neaktivnu ucionicu racunarskiCentar.Ucionice.Remove(oznakaUcionica.Text.Trim()); } else { // pamtimo stanje alikacije pre nego sto uradimo dodavanje novog staroStanje = new StanjeAplikacije(); staroStanje.RacunarskiCentar = DeepClone(racunarskiCentar); staroStanje.TipPodataka = "ucionica"; staroStanje.Kolicina = 1; staroStanje.TipPromene = "brisanje"; staroStanje.Oznake.Add(ucionica.Oznaka); // vracamo logicki obrisanu ucionicu da bude aktivna ucionica.Obrisan = false; dodavanjeUcioniceIzborStarogUnosa = true; } } else { Application.Current.Dispatcher.Invoke(() => { notifierError.ShowError("Učionica sa unetom oznakom već postoji!"); }); vratiNaKorak1(); UpdateLayout(); oznakaUcionica.Focus(); return(false); } } return(true); }
private bool validacijaDodavanjaSmera() { if (!validacijaPraznihPolja()) { return(false); } else if (racunarskiCentar.Smerovi.ContainsKey(OznakaSmera.Text.Trim())) { if (racunarskiCentar.Smerovi[OznakaSmera.Text.Trim()].Obrisan) { dodavanjeSmeraIzborStarogUnosa = false; Smer smer = racunarskiCentar.Smerovi[OznakaSmera.Text.Trim()]; // vec postoji smer sa tom oznakom, ali je logicki obrisan OdlukaDodavanjaSmer odluka = new OdlukaDodavanjaSmer(); odluka.Oznaka.Text = "Oznaka: " + smer.Oznaka; odluka.Naziv.Text = "Naziv: " + smer.Naziv; odluka.DatumUvodjenja.Text = "Datum uvođenja: " + smer.Datum; odluka.ShowDialog(); if (odluka.potvrdaNovogUnosa) { // ukoliko je korisnik potvrdio da zeli da unese nove podatke, gazimo postojeci neaktivan smer racunarskiCentar.Smerovi.Remove(OznakaSmera.Text.Trim()); } else { // pamtimo stanje alikacije pre nego sto uradimo dodavanje novog staroStanje = new StanjeAplikacije(); staroStanje.RacunarskiCentar = DeepClone(racunarskiCentar); staroStanje.TipPodataka = "smer"; staroStanje.Kolicina = 1; staroStanje.TipPromene = "brisanje"; staroStanje.Oznake.Add(smer.Oznaka); // vracamo logicki obrisan smer da bude aktivan smer.Obrisan = false; dodavanjeSmeraIzborStarogUnosa = true; } } else { Application.Current.Dispatcher.Invoke(() => { notifierError.ShowError("Smer sa unetom oznakom već postoji!"); }); OznakaSmera.Focus(); return(false); } } return(true); }
public DodavanjeUcionice(RacunarskiCentar racunarskiCentar, ObservableCollection <Ucionica> ucionice, bool izmena, string oznaka, Notifier notifierMainWindow, UndoRedoStack stack, OrderedDictionary prethodnaStanja) { notifierError = new Notifier(cfg => { cfg.PositionProvider = new WindowPositionProvider( parentWindow: this, corner: Corner.TopRight, offsetX: 20, offsetY: 10); cfg.LifetimeSupervisor = new TimeAndCountBasedLifetimeSupervisor( notificationLifetime: System.TimeSpan.FromSeconds(5), maximumNotificationCount: MaximumNotificationCount.FromCount(1)); cfg.Dispatcher = Application.Current.Dispatcher; }); this.prethodnaStanjaAplikacije = prethodnaStanja; this.staroStanje = null; this.potvrdio = false; this.stekStanja = stack; this.notifierMainWindow = notifierMainWindow; this.inicijalizacija = false; InitializeComponent(); this.inicijalizacija = true; this.dodavanjeUcioniceIzborStarogUnosa = false; novaUcionica = new Ucionica(); this.racunarskiCentar = racunarskiCentar; this.izmena = izmena; this.unosPrviPut = true; this.oznakaUcioniceZaIzmenu = oznaka; List <Softver> softveri = new List <Softver>(); foreach (Softver s in racunarskiCentar.Softveri.Values) { if (!s.Obrisan) { s.Instaliran = false; softveri.Add(s); } } softverTabela.ItemsSource = softveri; softverTabela.IsSynchronizedWithCurrentItem = true; tabelaUcionica = ucionice; if (!izmena) { oznakaUcionica.Focus(); } BackStepMenuItem.IsEnabled = false; }
public void getEvent(string id, string naziv, string pocetak, string kraj, string dan, string ucionica, bool dodat) { // pamtimo stanje alikacije pre nego sto uradimo dodavanje novog StanjeAplikacije staroStanje = new StanjeAplikacije(); staroStanje.RacunarskiCentar = DeepClone(racunarskiCentar); staroStanje.TipPodataka = "kalendar"; staroStanje.Kolicina = 1; if (!racunarskiCentar.PoljaKalendara.ContainsKey(id)) { staroStanje.TipPromene = "brisanje"; racunarskiCentar.PoljaKalendara.Add(id, new KalendarPolje(id, naziv, pocetak, kraj, dan, ucionica)); } else { staroStanje.TipPromene = "pomeranje"; KalendarPolje polje = racunarskiCentar.PoljaKalendara[id]; polje.Pocetak = pocetak; polje.Kraj = kraj; polje.Dan = dan; polje.Ucionica = ucionica; } if (dodat) { Predmet p = racunarskiCentar.Predmeti[naziv.Split('-')[0]]; p.PreostaliTermini--; } // na undo stek treba da upisemo staro stanje aplikacije // generisemo neki novi kljuc pod kojim cemo cuvati prethodno stanje na steku string kljuc = Guid.NewGuid().ToString(); // proveravamo da li vec ima 10 koraka za undo operaciju, ako ima, izbacujemo prvi koji je ubacen kako bismo // i dalje imali 10 mogucih koraka, ali ukljucujuci i ovaj novi if (prethodnaStanjaAplikacije.Count >= 2) { prethodnaStanjaAplikacije.RemoveAt(0); } prethodnaStanjaAplikacije.Add(kljuc, staroStanje); stekStanja.GetUndo().Push(kljuc); // omogucavamo pozivanje opcije undo Application.Current.Dispatcher.Invoke(() => { _instanceWindow.omoguciUndo(); }); }
public DodavanjeSmera(RacunarskiCentar racunarskiCentar, ObservableCollection <Smer> smerovi, bool izmena, string oznaka, Notifier notifierMainWindow, UndoRedoStack stack, OrderedDictionary prethodnaStanja) { notifierError = new Notifier(cfg => { cfg.PositionProvider = new WindowPositionProvider( parentWindow: this, corner: Corner.TopRight, offsetX: 20, offsetY: 10); cfg.LifetimeSupervisor = new TimeAndCountBasedLifetimeSupervisor( notificationLifetime: System.TimeSpan.FromSeconds(5), maximumNotificationCount: MaximumNotificationCount.FromCount(1)); cfg.Dispatcher = Application.Current.Dispatcher; }); this.prethodnaStanjaAplikacije = prethodnaStanja; this.staroStanje = null; this.potvrdio = false; this.stekStanja = stack; this.notifierMainWindow = notifierMainWindow; smer = new Smer(); this.racunarskiCentar = racunarskiCentar; this.izmena = izmena; this.unosPrviPut = true; this.oznakaSmeraZaIzmenu = oznaka; this.dodavanjeSmeraIzborStarogUnosa = false; tabelaSmerova = smerovi; InitializeComponent(); if (!izmena) { OznakaSmera.Focus(); } }
private void izmenaUcionice() { string novaOznaka = oznakaUcionica.Text.Trim(); if (novaOznaka != oznakaUcioniceZaIzmenu && racunarskiCentar.Ucionice.ContainsKey(novaOznaka)) { notifierError.ShowError("Učionica sa unetom oznakom već postoji u bazi!"); oznakaUcionica.Focus(); return; } if (validacijaPodataka() && validacijaIzmeneSoftvera() && validacijaIzmeneTable() && validacijaIzmenePametneTable() && validacijaIzmeneProjektora() && validacijaBrojaRadnihMesta()) { // pamtimo stanje alikacije pre nego sto uradimo dodavanje novog staroStanje = new StanjeAplikacije(); staroStanje.RacunarskiCentar = DeepClone(racunarskiCentar); staroStanje.TipPodataka = "ucionica"; staroStanje.Kolicina = 1; staroStanje.TipPromene = "izmena"; staroStanje.Oznake.Add(oznakaUcioniceZaIzmenu); Ucionica ucionicaIzmena = racunarskiCentar.Ucionice[oznakaUcioniceZaIzmenu]; string staraOznaka = ucionicaIzmena.Oznaka; bool oznakaIzmenjena = false; if (!staraOznaka.Equals(oznakaUcionica.Text.Trim())) { oznakaIzmenjena = true; } ucionicaIzmena.Oznaka = oznakaUcionica.Text.Trim(); ucionicaIzmena.Opis = opisUcionica.Text.Trim(); if (oznakaIzmenjena) { foreach (KalendarPolje polje in racunarskiCentar.PoljaKalendara.Values) { if (polje.Ucionica.Trim().Equals(staraOznaka)) { polje.Ucionica = ucionicaIzmena.Oznaka; } } racunarskiCentar.Ucionice.Remove(staraOznaka); racunarskiCentar.Ucionice.Add(ucionicaIzmena.Oznaka, ucionicaIzmena); } tabelaUcionica[indeks] = ucionicaIzmena; Application.Current.Dispatcher.Invoke(() => { notifierMainWindow.ShowSuccess("Uspešno ste izmenili učionicu!"); }); // na undo stek treba da upisemo staro stanje aplikacije // generisemo neki novi kljuc pod kojim cemo cuvati prethodno stanje na steku string kljuc = Guid.NewGuid().ToString(); // proveravamo da li vec ima 10 koraka za undo operaciju, ako ima, izbacujemo prvi koji je ubacen kako bismo // i dalje imali 10 mogucih koraka, ali ukljucujuci i ovaj novi if (prethodnaStanjaAplikacije.Count >= 10) { prethodnaStanjaAplikacije.RemoveAt(0); } prethodnaStanjaAplikacije.Add(kljuc, staroStanje); stekStanja.GetUndo().Push(kljuc); // postavljamo flag na true, da bismo mogli da omogucimo klik na dugme za undo operaciju potvrdio = true; this.Close(); } }
private void finishClick(object sender, RoutedEventArgs e) { finishButton.Focus(); if (izmena) { izmenaUcionice(); return; } if (validacijaNoveUcionice() && !dodavanjeUcioniceIzborStarogUnosa) { // pamtimo stanje alikacije pre nego sto uradimo dodavanje novog staroStanje = new StanjeAplikacije(); staroStanje.RacunarskiCentar = DeepClone(racunarskiCentar); staroStanje.TipPodataka = "ucionica"; staroStanje.Kolicina = 1; staroStanje.TipPromene = "brisanje"; staroStanje.Oznake.Add(oznakaUcionica.Text.Trim()); novaUcionica.Oznaka = oznakaUcionica.Text.Trim(); novaUcionica.Opis = opisUcionica.Text.Trim(); novaUcionica.PrisustvoPametneTable = prisustvoPametneTableUcionica.IsChecked; novaUcionica.PametnaTablaString = novaUcionica.PrisustvoPametneTable ? "prisutna" : "nije prisutna"; novaUcionica.PrisustvoTable = prisustvoTableUcionica.IsChecked; novaUcionica.TablaString = novaUcionica.PrisustvoTable ? "prisutna" : "nije prisutna"; novaUcionica.PrisustvoProjektora = prisustvoProjektoraUcionica.IsChecked; novaUcionica.ProjektorString = novaUcionica.PrisustvoProjektora ? "prisutan" : "nije prisutan"; novaUcionica.BrojRadnihMesta = int.Parse(brojRadnihMestaUcionica.Text.Trim()); if ((bool)LinuxOSUcionica.IsChecked) { novaUcionica.OperativniSistem = "Linux"; } else if ((bool)WindowsOSUcionica.IsChecked) { novaUcionica.OperativniSistem = "Windows"; } else { novaUcionica.OperativniSistem = "Windows i Linux"; } StringBuilder sb = new StringBuilder(); int brojSoftvera = 0; for (int i = 0; i < softverTabela.Items.Count; i++) { Softver softver = (Softver)softverTabela.Items[i]; if (softver.Instaliran) { brojSoftvera++; novaUcionica.InstaliraniSoftveri.Add(softver.Oznaka); if (brojSoftvera > 1) { sb.Append("\n"); } sb.Append("Oznaka: " + softver.Oznaka); sb.Append("\nNaziv: " + softver.Naziv); sb.Append("\nOpis: " + softver.Opis + "\n"); softver.Instaliran = false; } } novaUcionica.SoftveriLista = sb.ToString(); tabelaUcionica.Add(novaUcionica); racunarskiCentar.DodajUcionicu(novaUcionica); Application.Current.Dispatcher.Invoke(() => { notifierMainWindow.ShowSuccess("Uspešno ste dodali novu učionicu!"); }); // na undo stek treba da upisemo staro stanje aplikacije // generisemo neki novi kljuc pod kojim cemo cuvati prethodno stanje na steku string kljuc = Guid.NewGuid().ToString(); // proveravamo da li vec ima 10 koraka za undo operaciju, ako ima, izbacujemo prvi koji je ubacen kako bismo // i dalje imali 10 mogucih koraka, ali ukljucujuci i ovaj novi if (prethodnaStanjaAplikacije.Count >= 10) { prethodnaStanjaAplikacije.RemoveAt(0); } prethodnaStanjaAplikacije.Add(kljuc, staroStanje); stekStanja.GetUndo().Push(kljuc); // postavljamo flag na true, da bismo mogli da omogucimo klik na dugme za undo operaciju potvrdio = true; this.Close(); } else if (dodavanjeUcioniceIzborStarogUnosa) { // ukoliko postoji predmet (logicki neaktivan) sa istom oznakom // kao sto je uneta, ponovo aktiviramo taj predmet (postaje logicki aktivan) tabelaUcionica.Add(racunarskiCentar.Ucionice[oznakaUcionica.Text.Trim()]); Application.Current.Dispatcher.Invoke(() => { notifierMainWindow.ShowSuccess("Uspešno ste aktivirali postojeću učionicu!"); }); // na undo stek treba da upisemo staro stanje aplikacije // generisemo neki novi kljuc pod kojim cemo cuvati prethodno stanje na steku string kljuc = Guid.NewGuid().ToString(); // proveravamo da li vec ima 10 koraka za undo operaciju, ako ima, izbacujemo prvi koji je ubacen kako bismo // i dalje imali 10 mogucih koraka, ali ukljucujuci i ovaj novi if (prethodnaStanjaAplikacije.Count >= 10) { prethodnaStanjaAplikacije.RemoveAt(0); } prethodnaStanjaAplikacije.Add(kljuc, staroStanje); stekStanja.GetUndo().Push(kljuc); // postavljamo flag na true, da bismo mogli da omogucimo klik na dugme za undo operaciju potvrdio = true; this.Close(); } }
private void izmeniSmer() { string novaOznaka = OznakaSmera.Text.Trim(); if (novaOznaka != oznakaSmeraZaIzmenu && racunarskiCentar.Smerovi.ContainsKey(novaOznaka)) { notifierError.ShowError("Smer sa unetom oznakom već postoji u bazi!"); OznakaSmera.Focus(); return; } if (validacijaPraznihPolja()) { // pamtimo stanje alikacije pre nego sto uradimo dodavanje novog staroStanje = new StanjeAplikacije(); staroStanje.RacunarskiCentar = DeepClone(racunarskiCentar); staroStanje.TipPodataka = "smer"; staroStanje.Kolicina = 1; staroStanje.TipPromene = "izmena"; staroStanje.Oznake.Add(oznakaSmeraZaIzmenu); Smer smerIzmena = racunarskiCentar.Smerovi[oznakaSmeraZaIzmenu]; string staraOznaka = smerIzmena.Oznaka; bool oznakaIzmenjena = false; if (!staraOznaka.Equals(OznakaSmera.Text.Trim())) { oznakaIzmenjena = true; } smerIzmena.Oznaka = OznakaSmera.Text.Trim(); smerIzmena.Naziv = NazivSmera.Text.Trim(); smerIzmena.Opis = OpisSmera.Text.Trim(); string datum = DateTime.Parse(DatumUvodjenja.Text.Trim()).ToString("dd/MM/yyyy"); smerIzmena.Datum = datum; if (smerIzmena.Predmeti.Count > 0) { foreach (string predmet in smerIzmena.Predmeti) { racunarskiCentar.Predmeti[predmet].Smer = smerIzmena.Oznaka; racunarskiCentar.Predmeti[predmet].SmerDetalji = "Oznaka: " + smerIzmena.Oznaka + "\nNaziv: " + smerIzmena.Naziv; } } if (oznakaIzmenjena) { foreach (KalendarPolje polje in racunarskiCentar.PoljaKalendara.Values) { if (polje.NazivPolja.Split('-')[1].Trim().Equals(staraOznaka)) { polje.NazivPolja = polje.NazivPolja.Split('-')[0].Trim() + '-' + smerIzmena.Oznaka; } } racunarskiCentar.Smerovi.Remove(staraOznaka); racunarskiCentar.Smerovi.Add(smerIzmena.Oznaka, smerIzmena); } tabelaSmerova[indeks] = smerIzmena; Application.Current.Dispatcher.Invoke(() => { notifierMainWindow.ShowSuccess("Uspešno ste izmenili smer!"); }); // na undo stek treba da upisemo staro stanje aplikacije // generisemo neki novi kljuc pod kojim cemo cuvati prethodno stanje na steku string kljuc = Guid.NewGuid().ToString(); // proveravamo da li vec ima 10 koraka za undo operaciju, ako ima, izbacujemo prvi koji je ubacen kako bismo // i dalje imali 10 mogucih koraka, ali ukljucujuci i ovaj novi if (prethodnaStanjaAplikacije.Count >= 10) { prethodnaStanjaAplikacije.RemoveAt(0); } prethodnaStanjaAplikacije.Add(kljuc, staroStanje); stekStanja.GetUndo().Push(kljuc); // postavljamo flag na true, da bismo mogli da omogucimo klik na dugme za undo operaciju potvrdio = true; this.Close(); } }
private void finishClick(object sender, RoutedEventArgs e) { if (izmena) { izmeniSmer(); return; } if (validacijaDodavanjaSmera() && !dodavanjeSmeraIzborStarogUnosa) { // pamtimo stanje alikacije pre nego sto uradimo dodavanje novog staroStanje = new StanjeAplikacije(); staroStanje.RacunarskiCentar = DeepClone(racunarskiCentar); staroStanje.TipPodataka = "smer"; staroStanje.Kolicina = 1; staroStanje.TipPromene = "brisanje"; staroStanje.Oznake.Add(OznakaSmera.Text.Trim()); smer.Naziv = NazivSmera.Text.Trim(); smer.Oznaka = OznakaSmera.Text.Trim(); smer.Opis = OpisSmera.Text.Trim(); string datum = DateTime.Parse(DatumUvodjenja.Text.Trim()).ToString("dd/MM/yyyy"); smer.Datum = datum; tabelaSmerova.Add(smer); racunarskiCentar.DodajSmer(smer); Application.Current.Dispatcher.Invoke(() => { notifierMainWindow.ShowSuccess("Uspešno ste dodali novi smer!"); }); // na undo stek treba da upisemo staro stanje aplikacije // generisemo neki novi kljuc pod kojim cemo cuvati prethodno stanje na steku string kljuc = Guid.NewGuid().ToString(); // proveravamo da li vec ima 10 koraka za undo operaciju, ako ima, izbacujemo prvi koji je ubacen kako bismo // i dalje imali 10 mogucih koraka, ali ukljucujuci i ovaj novi if (prethodnaStanjaAplikacije.Count >= 10) { prethodnaStanjaAplikacije.RemoveAt(0); } prethodnaStanjaAplikacije.Add(kljuc, staroStanje); stekStanja.GetUndo().Push(kljuc); // postavljamo flag na true, da bismo mogli da omogucimo klik na dugme za undo operaciju potvrdio = true; this.Close(); } else if (dodavanjeSmeraIzborStarogUnosa) { // ukoliko postoji smer (logicki neaktivan) sa istom oznakom // kao sto je uneta, ponovo aktiviramo taj smer (postaje logicki aktivan) tabelaSmerova.Add(racunarskiCentar.Smerovi[OznakaSmera.Text.Trim()]); Application.Current.Dispatcher.Invoke(() => { notifierMainWindow.ShowSuccess("Uspešno ste aktivirali smer!"); }); // na undo stek treba da upisemo staro stanje aplikacije // generisemo neki novi kljuc pod kojim cemo cuvati prethodno stanje na steku string kljuc = Guid.NewGuid().ToString(); // proveravamo da li vec ima 10 koraka za undo operaciju, ako ima, izbacujemo prvi koji je ubacen kako bismo // i dalje imali 10 mogucih koraka, ali ukljucujuci i ovaj novi if (prethodnaStanjaAplikacije.Count >= 10) { prethodnaStanjaAplikacije.RemoveAt(0); } prethodnaStanjaAplikacije.Add(kljuc, staroStanje); stekStanja.GetUndo().Push(kljuc); // postavljamo flag na true, da bismo mogli da omogucimo klik na dugme za undo operaciju potvrdio = true; this.Close(); } }
private void finishClick(object sender, RoutedEventArgs e) { if (validacijaPodataka()) { // pamtimo stanje alikacije pre nego sto uradimo dodavanje novog StanjeAplikacije staroStanje = new StanjeAplikacije(); staroStanje.RacunarskiCentar = DeepClone(racunarskiCentar); staroStanje.TipPodataka = "softver"; staroStanje.Kolicina = indeksiZaIzmenu.Count; staroStanje.TipPromene = "izmena"; foreach (int index in indeksiZaIzmenu) { staroStanje.Oznake.Add(tabelaSoftvera[index].Oznaka); } List <string> softveriIzmenjenogNazivaIliOpisa = new List <string>(); foreach (int index in indeksiZaIzmenu) { Softver softverIzmena = racunarskiCentar.Softveri[tabelaSoftvera[index].Oznaka]; if (nazivSoftver.Text.Trim() != "") { if (!softverIzmena.Naziv.Equals(nazivSoftver.Text.Trim())) { softveriIzmenjenogNazivaIliOpisa.Add(softverIzmena.Oznaka); } softverIzmena.Naziv = nazivSoftver.Text.Trim(); } if (opisSoftver.Text.Trim() != "") { if (!softverIzmena.Opis.Equals(opisSoftver.Text.Trim())) { softveriIzmenjenogNazivaIliOpisa.Add(softverIzmena.Oznaka); } softverIzmena.Opis = opisSoftver.Text.Trim(); } if (godinaSoftver.Text.Trim() != "") { softverIzmena.GodIzdavanja = int.Parse(godinaSoftver.Text.Trim()); } if (cenaSoftver.Text.Trim() != "") { softverIzmena.Cena = double.Parse(cenaSoftver.Text.Trim()); } if (proizvodjacSoftver.Text.Trim() != "") { softverIzmena.Proizvodjac = proizvodjacSoftver.Text.Trim(); } if (sajtSoftver.Text.Trim() != "") { softverIzmena.Sajt = sajtSoftver.Text.Trim(); } tabelaSoftvera[index] = softverIzmena; } if (softveriIzmenjenogNazivaIliOpisa.Count > 0) { // azurira se i ispis softvera za ucionicu/predmet StringBuilder sb = new StringBuilder(); List <string> obradjeneUcionice = new List <string>(); List <string> obradjeniPredmeti = new List <string>(); foreach (string oznaka in softveriIzmenjenogNazivaIliOpisa) { // azuriranje ispisa u ucionici ako postoji taj softver foreach (Ucionica u in racunarskiCentar.Ucionice.Values) { if (!obradjeneUcionice.Contains(u.Oznaka) && u.InstaliraniSoftveri.Contains(oznaka)) { foreach (string s in u.InstaliraniSoftveri) { Softver softver = racunarskiCentar.Softveri[s]; if (u.InstaliraniSoftveri.IndexOf(softver.Oznaka) != 0) { sb.Append("\n"); } sb.Append("Oznaka: " + softver.Oznaka); sb.Append("\nNaziv: " + softver.Naziv); sb.Append("\nOpis: " + softver.Opis + "\n"); } u.SoftveriLista = sb.ToString(); sb.Clear(); obradjeneUcionice.Add(u.Oznaka); } } // azuriranje ispisa u predmetu ako postoji taj softver foreach (Predmet p in racunarskiCentar.Predmeti.Values) { if (!obradjeniPredmeti.Contains(p.Oznaka) && p.Softveri.Contains(oznaka)) { foreach (string s in p.Softveri) { Softver softver = racunarskiCentar.Softveri[s]; if (p.Softveri.IndexOf(softver.Oznaka) != 0) { sb.Append("\n"); } sb.Append("Oznaka: " + softver.Oznaka); sb.Append("\nNaziv: " + softver.Naziv); sb.Append("\nOpis: " + softver.Opis + "\n"); } p.SoftveriLista = sb.ToString(); sb.Clear(); obradjeniPredmeti.Add(p.Oznaka); } } } } Application.Current.Dispatcher.Invoke(() => { notifierMainWindow.ShowSuccess("Uspešno ste izmenili softvere!"); }); // na undo stek treba da upisemo staro stanje aplikacije // generisemo neki novi kljuc pod kojim cemo cuvati prethodno stanje na steku string kljuc = Guid.NewGuid().ToString(); // proveravamo da li vec ima 10 koraka za undo operaciju, ako ima, izbacujemo prvi koji je ubacen kako bismo // i dalje imali 10 mogucih koraka, ali ukljucujuci i ovaj novi if (prethodnaStanjaAplikacije.Count >= 2) { prethodnaStanjaAplikacije.RemoveAt(0); } prethodnaStanjaAplikacije.Add(kljuc, staroStanje); stekStanja.GetUndo().Push(kljuc); // postavljamo flag na true, da bismo mogli da omogucimo klik na dugme za undo operaciju potvrdaIzmena = true; this.Close(); } }
private void izmeniSoftver() { string novaOznaka = oznakaSoftver.Text.Trim(); if (novaOznaka != oznakaSoftveraZaIzmenu && racunarskiCentar.Softveri.ContainsKey(novaOznaka)) { notifierError.ShowError("Softver sa unetom oznakom već postoji u bazi!"); oznakaSoftver.Focus(); return; } if (validacijaPodataka() && proveraIzmeneOS(oznakaSoftveraZaIzmenu)) { // pamtimo stanje alikacije pre nego sto uradimo dodavanje novog staroStanje = new StanjeAplikacije(); staroStanje.RacunarskiCentar = DeepClone(racunarskiCentar); staroStanje.TipPodataka = "softver"; staroStanje.Kolicina = 1; staroStanje.TipPromene = "izmena"; staroStanje.Oznake.Add(oznakaSoftveraZaIzmenu); Softver softverIzmena = racunarskiCentar.Softveri[oznakaSoftveraZaIzmenu]; bool promenilaSeOznaka = false; bool promenioSeNaziv = false; bool promenioSeOpis = false; string staraOznaka = softverIzmena.Oznaka; if ((bool)WindowsOSSoftver.IsChecked) { softverIzmena.OperativniSistem = "Windows"; } else if ((bool)LinuxOSSoftver.IsChecked) { softverIzmena.OperativniSistem = "Linux"; } else { softverIzmena.OperativniSistem = "Windows i Linux"; } if (!softverIzmena.Oznaka.Equals(oznakaSoftver.Text.Trim())) { promenilaSeOznaka = true; } softverIzmena.Oznaka = oznakaSoftver.Text.Trim(); if (!softverIzmena.Naziv.Equals(nazivSoftver.Text.Trim())) { promenioSeNaziv = true; } softverIzmena.Naziv = nazivSoftver.Text.Trim(); if (!softverIzmena.Opis.Equals(opisSoftver.Text.Trim())) { promenioSeOpis = true; } softverIzmena.Opis = opisSoftver.Text.Trim(); softverIzmena.GodIzdavanja = int.Parse(godinaSoftver.Text.Trim()); softverIzmena.Cena = double.Parse(cenaSoftver.Text.Trim()); softverIzmena.Proizvodjac = proizvodjacSoftver.Text.Trim(); softverIzmena.Sajt = sajtSoftver.Text.Trim(); // azurira se oznaka u listi instaliranih softvera/neophodnih softvera u ucionici/predmetu // azurira se i ispis softvera za ucionicu/predmet StringBuilder sb = new StringBuilder(); if (promenilaSeOznaka || promenioSeNaziv || promenioSeOpis) { List <string> ucioniceZaIzmenu = new List <string>(); foreach (Ucionica u in racunarskiCentar.Ucionice.Values) { if (u.InstaliraniSoftveri.Contains(staraOznaka)) { if (promenilaSeOznaka) { // ukoliko se promenila oznaka softvera, uklanjamo staru iz odgovarajcue liste u ucionici // u kojoj je instaliran i pamtimo oznaku ucionice u koju treba da dodamo promenjenu oznaku softvera u.InstaliraniSoftveri.Remove(staraOznaka); ucioniceZaIzmenu.Add(u.Oznaka); } } } // idemo kroz sve ucionice u kojima treba azurirati stanje softvera i menjamo staru oznaku novom (izbacili smo // staru i sad ubacujemo novu), azuriramo ispis foreach (string oznaka in ucioniceZaIzmenu) { Ucionica u = racunarskiCentar.Ucionice[oznaka]; u.InstaliraniSoftveri.Add(softverIzmena.Oznaka); foreach (string s in u.InstaliraniSoftveri) { if (s.Equals(softverIzmena.Oznaka)) { if (u.InstaliraniSoftveri.IndexOf(s) != 0) { sb.Append("\n"); } sb.Append("Oznaka: " + softverIzmena.Oznaka); sb.Append("\nNaziv: " + softverIzmena.Naziv); sb.Append("\nOpis: " + softverIzmena.Opis + "\n"); } else { Softver softver = racunarskiCentar.Softveri[s]; if (u.InstaliraniSoftveri.IndexOf(s) != 0) { sb.Append("\n"); } sb.Append("Oznaka: " + softver.Oznaka); sb.Append("\nNaziv: " + softver.Naziv); sb.Append("\nOpis: " + softver.Opis + "\n"); } } u.SoftveriLista = sb.ToString(); sb.Clear(); } List <string> predmetiZaIzmenu = new List <string>(); foreach (Predmet p in racunarskiCentar.Predmeti.Values) { if (p.Softveri.Contains(staraOznaka)) { if (promenilaSeOznaka) { // ukoliko se promenila oznaka softvera, uklanjamo staru iz odgovarajcue liste u predmetu // koji koristi ovaj softver i pamtimo oznaku predmeta u koji treba da dodamo promenjenu oznaku predmeta p.Softveri.Remove(staraOznaka); predmetiZaIzmenu.Add(p.Oznaka); } } } // idemo kroz sve predmete u kojima treba azurirati stanje softvera i menjamo staru oznaku novom (izbacili smo // staru i sad ubacujemo novu), azuriramo ispis foreach (string oznaka in predmetiZaIzmenu) { Predmet p = racunarskiCentar.Predmeti[oznaka]; p.Softveri.Add(softverIzmena.Oznaka); foreach (string s in p.Softveri) { if (s.Equals(softverIzmena.Oznaka)) { if (p.Softveri.IndexOf(s) != 0) { sb.Append("\n"); } sb.Append("Oznaka: " + softverIzmena.Oznaka); sb.Append("\nNaziv: " + softverIzmena.Naziv); sb.Append("\nOpis: " + softverIzmena.Opis + "\n"); } else { Softver softver = racunarskiCentar.Softveri[s]; if (p.Softveri.IndexOf(s) != 0) { sb.Append("\n"); } sb.Append("Oznaka: " + softver.Oznaka); sb.Append("\nNaziv: " + softver.Naziv); sb.Append("\nOpis: " + softver.Opis + "\n"); } } p.SoftveriLista = sb.ToString(); sb.Clear(); } } if (promenilaSeOznaka) { racunarskiCentar.Softveri.Remove(staraOznaka); racunarskiCentar.Softveri.Add(softverIzmena.Oznaka, softverIzmena); } tabelaSoftvera[indeks] = softverIzmena; Application.Current.Dispatcher.Invoke(() => { notifierMainWindow.ShowSuccess("Uspešno ste izmenili softver!"); }); // na undo stek treba da upisemo staro stanje aplikacije // generisemo neki novi kljuc pod kojim cemo cuvati prethodno stanje na steku string kljuc = Guid.NewGuid().ToString(); // proveravamo da li vec ima 10 koraka za undo operaciju, ako ima, izbacujemo prvi koji je ubacen kako bismo // i dalje imali 10 mogucih koraka, ali ukljucujuci i ovaj novi if (prethodnaStanjaAplikacije.Count >= 3) { prethodnaStanjaAplikacije.RemoveAt(0); } prethodnaStanjaAplikacije.Add(kljuc, staroStanje); stekStanja.GetUndo().Push(kljuc); // postavljamo flag na true, da bismo mogli da omogucimo klik na dugme za undo operaciju potvrdio = true; this.Close(); } }
public Tutorijal(RacunarskiCentar racunarskiCentar, ObservableCollection <Softver> softveri, bool izmena, string oznaka, Notifier notifierMainWindow, UndoRedoStack stack, OrderedDictionary prethodnaStanja) { notifierError = new Notifier(cfg => { cfg.PositionProvider = new WindowPositionProvider( parentWindow: this, corner: Corner.TopRight, offsetX: 20, offsetY: 10); cfg.LifetimeSupervisor = new TimeAndCountBasedLifetimeSupervisor( notificationLifetime: System.TimeSpan.FromSeconds(5), maximumNotificationCount: MaximumNotificationCount.FromCount(1)); cfg.Dispatcher = Application.Current.Dispatcher; }); this.potvrdio = false; this.stekStanja = stack; this.notifierMainWindow = notifierMainWindow; InitializeComponent(); this.racunarskiCentar = racunarskiCentar; this.izmena = izmena; this.unosPrviPut = true; this.oznakaSoftveraZaIzmenu = oznaka; this.dodavanjeSoftveraIzborStarogUnosa = false; tabelaSoftvera = softveri; noviSoftver = new Softver(); if (!izmena) { oznakaSoftver.Focus(); } BackStepMenuItem.IsEnabled = false; this.prethodnaStanjaAplikacije = prethodnaStanja; this.staroStanje = null; //ukljuci prvi pop-up popupOznaka.IsOpen = true; pop = popupOznaka; Window w = this; if (null != w) { w.LocationChanged += delegate(object sender, EventArgs e) { var offset = popupOznaka.HorizontalOffset; popupOznaka.HorizontalOffset = offset + 1; popupOznaka.HorizontalOffset = offset; offset = popupNaziv.HorizontalOffset; popupNaziv.HorizontalOffset = offset + 1; popupNaziv.HorizontalOffset = offset; offset = popupOS.HorizontalOffset; popupOS.HorizontalOffset = offset + 1; popupOS.HorizontalOffset = offset; offset = popupProizvodjac.HorizontalOffset; popupProizvodjac.HorizontalOffset = offset + 1; popupProizvodjac.HorizontalOffset = offset; offset = popupNastavi.HorizontalOffset; popupNastavi.HorizontalOffset = offset + 1; popupNastavi.HorizontalOffset = offset; offset = popupSajt.HorizontalOffset; popupSajt.HorizontalOffset = offset + 1; popupSajt.HorizontalOffset = offset; offset = popupGodina.HorizontalOffset; popupGodina.HorizontalOffset = offset + 1; popupGodina.HorizontalOffset = offset; offset = popupCena.HorizontalOffset; popupCena.HorizontalOffset = offset + 1; popupCena.HorizontalOffset = offset; offset = popupOpis.HorizontalOffset; popupOpis.HorizontalOffset = offset + 1; popupOpis.HorizontalOffset = offset; offset = popupZavrsi.HorizontalOffset; popupZavrsi.HorizontalOffset = offset + 1; popupZavrsi.HorizontalOffset = offset; }; w.SizeChanged += delegate(object sender, SizeChangedEventArgs e) { var offset = popupOznaka.HorizontalOffset; popupOznaka.HorizontalOffset = offset + 1; popupOznaka.HorizontalOffset = offset; offset = popupNaziv.HorizontalOffset; popupNaziv.HorizontalOffset = offset + 1; popupNaziv.HorizontalOffset = offset; offset = popupOS.HorizontalOffset; popupOS.HorizontalOffset = offset + 1; popupOS.HorizontalOffset = offset; offset = popupProizvodjac.HorizontalOffset; popupProizvodjac.HorizontalOffset = offset + 1; popupProizvodjac.HorizontalOffset = offset; offset = popupNastavi.HorizontalOffset; popupNastavi.HorizontalOffset = offset + 1; popupNastavi.HorizontalOffset = offset; offset = popupSajt.HorizontalOffset; popupSajt.HorizontalOffset = offset + 1; popupSajt.HorizontalOffset = offset; offset = popupGodina.HorizontalOffset; popupGodina.HorizontalOffset = offset + 1; popupGodina.HorizontalOffset = offset; offset = popupCena.HorizontalOffset; popupCena.HorizontalOffset = offset + 1; popupCena.HorizontalOffset = offset; offset = popupOpis.HorizontalOffset; popupOpis.HorizontalOffset = offset + 1; popupOpis.HorizontalOffset = offset; offset = popupZavrsi.HorizontalOffset; popupZavrsi.HorizontalOffset = offset + 1; popupZavrsi.HorizontalOffset = offset; }; } }
private void finishClick(object sender, RoutedEventArgs e) { if (izmena) { izmeniSoftver(); return; } if (validacijaNovogSoftvera() && !dodavanjeSoftveraIzborStarogUnosa) { // pamtimo stanje alikacije pre nego sto uradimo dodavanje novog staroStanje = new StanjeAplikacije(); staroStanje.RacunarskiCentar = DeepClone(racunarskiCentar); staroStanje.TipPodataka = "softver"; staroStanje.Kolicina = 1; staroStanje.TipPromene = "brisanje"; staroStanje.Oznake.Add(oznakaSoftver.Text.Trim()); noviSoftver.Oznaka = oznakaSoftver.Text.Trim(); noviSoftver.Naziv = nazivSoftver.Text.Trim(); noviSoftver.Opis = opisSoftver.Text.Trim(); noviSoftver.GodIzdavanja = int.Parse(godinaSoftver.Text.Trim()); noviSoftver.Cena = double.Parse(cenaSoftver.Text.Trim()); if ((bool)WindowsOSSoftver.IsChecked) { noviSoftver.OperativniSistem = "Windows"; } else if ((bool)LinuxOSSoftver.IsChecked) { noviSoftver.OperativniSistem = "Linux"; } else { noviSoftver.OperativniSistem = "Windows i Linux"; } noviSoftver.Proizvodjac = proizvodjacSoftver.Text.Trim(); noviSoftver.Sajt = sajtSoftver.Text.Trim(); tabelaSoftvera.Add(noviSoftver); racunarskiCentar.DodajSoftver(noviSoftver); Application.Current.Dispatcher.Invoke(() => { notifierMainWindow.ShowSuccess("Uspešno ste dodali novi softver!"); }); // na undo stek treba da upisemo staro stanje aplikacije // generisemo neki novi kljuc pod kojim cemo cuvati prethodno stanje na steku string kljuc = Guid.NewGuid().ToString(); // proveravamo da li vec ima 10 koraka za undo operaciju, ako ima, izbacujemo prvi koji je ubacen kako bismo // i dalje imali 10 mogucih koraka, ali ukljucujuci i ovaj novi if (prethodnaStanjaAplikacije.Count >= 3) { prethodnaStanjaAplikacije.RemoveAt(0); } prethodnaStanjaAplikacije.Add(kljuc, staroStanje); stekStanja.GetUndo().Push(kljuc); // postavljamo flag na true, da bismo mogli da omogucimo klik na dugme za undo operaciju potvrdio = true; this.Close(); } else if (dodavanjeSoftveraIzborStarogUnosa) { // ukoliko postoji softver (logicki neaktivan) sa istom oznakom // kao sto je uneta, ponovo aktiviramo taj softver (postaje logicki aktivan) tabelaSoftvera.Add(racunarskiCentar.Softveri[oznakaSoftver.Text.Trim()]); Application.Current.Dispatcher.Invoke(() => { notifierMainWindow.ShowSuccess("Uspešno ste aktivirali postojeći softver!"); }); // na undo stek treba da upisemo staro stanje aplikacije // generisemo neki novi kljuc pod kojim cemo cuvati prethodno stanje na steku string kljuc = Guid.NewGuid().ToString(); // proveravamo da li vec ima 10 koraka za undo operaciju, ako ima, izbacujemo prvi koji je ubacen kako bismo // i dalje imali 10 mogucih koraka, ali ukljucujuci i ovaj novi if (prethodnaStanjaAplikacije.Count >= 3) { prethodnaStanjaAplikacije.RemoveAt(0); } prethodnaStanjaAplikacije.Add(kljuc, staroStanje); stekStanja.GetUndo().Push(kljuc); // postavljamo flag na true, da bismo mogli da omogucimo klik na dugme za undo operaciju potvrdio = true; this.Close(); } }
private void finishClick(object sender, RoutedEventArgs e) { if (validacijaPraznihPolja()) { // pamtimo stanje alikacije pre nego sto uradimo dodavanje novog StanjeAplikacije staroStanje = new StanjeAplikacije(); staroStanje.RacunarskiCentar = DeepClone(racunarskiCentar); staroStanje.TipPodataka = "smer"; staroStanje.Kolicina = indeksi.Count; staroStanje.TipPromene = "izmena"; foreach (int index in indeksi) { staroStanje.Oznake.Add(tabelaSmerova[index].Oznaka); } foreach (int index in indeksi) { Smer smerIzmena = racunarskiCentar.Smerovi[tabelaSmerova[index].Oznaka]; bool nazivPromenjen = false; if (NazivSmera.Text.Trim() != "") { smerIzmena.Naziv = NazivSmera.Text.Trim(); nazivPromenjen = true; } if (OpisSmera.Text.Trim() != "") { smerIzmena.Opis = OpisSmera.Text.Trim(); } if (DatumUvodjenja.Text.Trim() != "") { smerIzmena.Datum = DateTime.Parse(DatumUvodjenja.Text.Trim()).ToString("dd/MM/yyyy"); } if (smerIzmena.Predmeti.Count > 0 && nazivPromenjen) { foreach (string predmet in smerIzmena.Predmeti) { racunarskiCentar.Predmeti[predmet].SmerDetalji = "Oznaka: " + smerIzmena.Oznaka + "\nNaziv: " + smerIzmena.Naziv; } } tabelaSmerova[index] = smerIzmena; } Application.Current.Dispatcher.Invoke(() => { notifierMainWindow.ShowSuccess("Uspešno ste izmenili smerove!"); }); // na undo stek treba da upisemo staro stanje aplikacije // generisemo neki novi kljuc pod kojim cemo cuvati prethodno stanje na steku string kljuc = Guid.NewGuid().ToString(); // proveravamo da li vec ima 10 koraka za undo operaciju, ako ima, izbacujemo prvi koji je ubacen kako bismo // i dalje imali 10 mogucih koraka, ali ukljucujuci i ovaj novi if (prethodnaStanjaAplikacije.Count >= 2) { prethodnaStanjaAplikacije.RemoveAt(0); } prethodnaStanjaAplikacije.Add(kljuc, staroStanje); stekStanja.GetUndo().Push(kljuc); // postavljamo flag na true, da bismo mogli da omogucimo klik na dugme za undo operaciju potvrdaIzmena = true; this.Close(); } }