public DodavanjeSoftvera(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; }
private void prikazOdgovarajucihSoftvera(object sender, EventArgs e) { if (inicijalizacija) { softverPretragaUnosUcionica.Text = ""; if ((bool)LinuxOSUcionica.IsChecked) { // ukoliko postoje vec prethodno izabrani softveri, proverava se da li medju njima ima neki // kom je OS Windows --> ukoliko ima, izbacuje se // samo odcekiramo softvere koji imaju OS Windows iz tabele softvera u prozoru za dodavanje for (int i = 0; i < softverTabela.Items.Count; i++) { Softver softver = (Softver)softverTabela.Items[i]; if (softver.Instaliran && softver.OperativniSistem.Equals("Windows")) { softver.Instaliran = false; } } softverTabela.Items.Refresh(); // filtriranje i prikazivanje softvera za linux i cross platform ICollectionView cv = CollectionViewSource.GetDefaultView(softverTabela.ItemsSource); cv.Filter = o => { Softver s = o as Softver; return(s.OperativniSistem.ToUpper().Equals("LINUX") || s.OperativniSistem.ToUpper().Contains("LINUX")); }; } else if ((bool)WindowsOSUcionica.IsChecked) { // ukoliko postoje vec prethodno izabrani softveri, proverava se da li medju njima ima neki // kom je OS Linux --> ukoliko ima, izbacuje se // samo odcekiramo softvere koji imaju OS Linux iz tabele softvera u prozoru za dodavanje for (int i = 0; i < softverTabela.Items.Count; i++) { Softver softver = (Softver)softverTabela.Items[i]; if (softver.Instaliran && softver.OperativniSistem.Equals("Linux")) { softver.Instaliran = false; } } softverTabela.Items.Refresh(); // filtriranje i prikazivanje softvera za windows i cross platform ICollectionView cv = CollectionViewSource.GetDefaultView(softverTabela.ItemsSource); cv.Filter = o => { Softver s = o as Softver; return(s.OperativniSistem.ToUpper().Equals("WINDOWS") || s.OperativniSistem.ToUpper().Contains("WINDOWS")); }; } else if ((bool)WindowsAndLinuxOSUcionica.IsChecked) { // prikaz svih softvera koji postoje (linux, windows, cross platform) ICollectionView cv = CollectionViewSource.GetDefaultView(softverTabela.ItemsSource); cv.Filter = o => { Softver s = o as Softver; return(s.OperativniSistem.ToUpper().Contains("LINUX") || s.OperativniSistem.ToUpper().Contains("WINDOWS")); }; } } }
private bool validacijaIzmeneSoftvera() { Ucionica staraUcionica = racunarskiCentar.Ucionice[oznakaUcioniceZaIzmenu]; List <string> sviPredmetiUcionice = new List <string>(); foreach (KalendarPolje polje in racunarskiCentar.PoljaKalendara.Values) //trazimo sve predmete koji se odrzavaju u datoj ucionici { if (polje.Ucionica.Trim().Equals(staraUcionica.Oznaka.Trim())) { sviPredmetiUcionice.Add(polje.NazivPolja.Split('-')[0].Trim()); } } List <string> predmetiUcionice = sviPredmetiUcionice.Distinct().ToList(); //izbacimo duplikate List <string> predmetiBezSoftvera = new List <string>(); foreach (string poz in sviPredmetiUcionice) // prolazim kroz sve predmete unutar ucionice { Predmet predmet = racunarskiCentar.Predmeti[poz]; foreach (string soft in predmet.Softveri) //prolazim kroz sve softvere jednog predmeta { bool postoji = false; for (int i = 0; i < softverTabela.Items.Count; i++) //iteriram kroz svaki oznaceni softver { Softver softver = (Softver)softverTabela.Items[i]; if (softver.Instaliran) { if (soft.Trim().Equals(softver.Oznaka.Trim())) //trazim taj softver u ucionici { postoji = true; } } } if (!postoji) { predmetiBezSoftvera.Add(poz); } } } List <string> predmetiBezSoftBezDupl = predmetiBezSoftvera.Distinct().ToList(); if (predmetiBezSoftBezDupl.Count > 0) { PotvrdaIzmene potvrda = new PotvrdaIzmene(); potvrda.Title = "Nedostatak softvera"; potvrda.PorukaBrisanja.Text = "Da li ste sigurni?\n\nUkoliko potvrdite izmenu, sledeci predmeti ce se ukloniti iz rasporeda" + " u ucionici zbog nedostatka softvera:\n"; List <string> kljuceviPolja = new List <string>(); for (int i = 0; i < predmetiBezSoftBezDupl.Count; i++) { potvrda.PorukaBrisanja.Text += "\n" + (i + 1) + ". " + predmetiBezSoftBezDupl[i]; foreach (KalendarPolje polje in racunarskiCentar.PoljaKalendara.Values) { if (polje.NazivPolja.Split('-')[0].Trim().Equals(predmetiBezSoftBezDupl[i]) && polje.Ucionica.Equals(staraUcionica.Oznaka)) { kljuceviPolja.Add(polje.Id); } } } potvrda.ShowDialog(); if (potvrda.daKlik) { foreach (string id in kljuceviPolja) { racunarskiCentar.PoljaKalendara.Remove(id); } foreach (string poz in predmetiBezSoftvera) { racunarskiCentar.Predmeti[poz].PreostaliTermini++; } } else { return(false); } } if ((bool)LinuxOSUcionica.IsChecked) { staraUcionica.OperativniSistem = "Linux"; } else if ((bool)WindowsOSUcionica.IsChecked) { staraUcionica.OperativniSistem = "Windows"; } else { staraUcionica.OperativniSistem = "Windows i Linux"; } staraUcionica.InstaliraniSoftveri.Clear(); 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++; staraUcionica.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; } } staraUcionica.SoftveriLista = sb.ToString(); return(true); }
private bool validacijaPodataka() { if (oznakaUcionica.Text.Trim() == "" || opisUcionica.Text.Trim() == "" || brojRadnihMestaUcionica.Text.Trim() == "") { // provera praznih polja da bismo ih uokvirili u crveno if (oznakaUcionica.Text.Trim() == "") { oznakaUcionica.BorderBrush = System.Windows.Media.Brushes.Red; } if (opisUcionica.Text.Trim() == "") { opisUcionica.BorderBrush = System.Windows.Media.Brushes.Red; } Application.Current.Dispatcher.Invoke(() => { notifierError.ShowError("Niste popunili sva polja!"); }); if (oznakaUcionica.Text.Trim() == "") { vratiNaKorak1(); UpdateLayout(); oznakaUcionica.Focus(); } else if (opisUcionica.Text.Trim() == "") { vratiNaKorak1(); UpdateLayout(); opisUcionica.Focus(); } else if (brojRadnihMestaUcionica.Text.Trim() == "") { vratiNaKorak2(); UpdateLayout(); brojRadnihMestaUcionica.Focus(); } return(false); } int brMesta; if (!int.TryParse(brojRadnihMestaUcionica.Text.Trim(), out brMesta)) { Application.Current.Dispatcher.Invoke(() => { notifierError.ShowError("Broj radnih mesta nije dobro unesen, unesite broj!"); }); brojRadnihMestaUcionica.Text = ""; brojRadnihMestaUcionica.Focus(); return(false); } bool postojiSoftver = false; if (softverTabela.Items.Count > 0) { for (int i = 0; i < softverTabela.Items.Count; i++) { Softver softver = (Softver)softverTabela.Items[i]; if (softver.Instaliran) { postojiSoftver = true; } } if (!postojiSoftver) { Application.Current.Dispatcher.Invoke(() => { notifierError.ShowError("Niste označili potreban softver/softvere!"); }); if (tabControlUcionica.SelectedIndex != 1) { vratiNaKorak2(); UpdateLayout(); } softverTabela.Focus(); DataGridCellInfo firstRowCell = new DataGridCellInfo(softverTabela.Items[0], softverTabela.Columns[3]); softverTabela.CurrentCell = firstRowCell; softverTabela.ScrollIntoView(softverTabela.Items[0]); softverTabela.BeginEdit(); return(false); } } else { Application.Current.Dispatcher.Invoke(() => { notifierError.ShowError("Morate prvo uneti softver da biste mogli da unesete učionicu!"); }); return(false); } return(true); }
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 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(); } }
private bool proveraIzmeneOS(string oznaka) { Softver softver = racunarskiCentar.Softveri[oznaka]; string zeljeniOS = ""; if ((bool)WindowsOSSoftver.IsChecked) { zeljeniOS = "Windows"; } else if ((bool)LinuxOSSoftver.IsChecked) { zeljeniOS = "Linux"; } else { zeljeniOS = "Windows i Linux"; } bool nadjenPredmetKomSmetaOS = false; bool nadjenaUcionicaKojojSmetaOS = false; foreach (Predmet p in racunarskiCentar.Predmeti.Values) { if (zeljeniOS == "Windows") { if (p.OperativniSistem == "Linux" && p.Softveri.Contains(oznaka) && !p.Obrisan) { // nije dozvoljena promena OS softvera na windows, ako medju predmetima koji ga koriste // postoji neki koji ima OS linux nadjenPredmetKomSmetaOS = true; break; } } else if (zeljeniOS == "Linux") { if (p.OperativniSistem == "Windows" && p.Softveri.Contains(oznaka) && !p.Obrisan) { // nije dozvoljena promena OS softvera na linux, ako medju predmetima koji ga koriste // postoji neki koji ima OS windows nadjenPredmetKomSmetaOS = true; break; } } } if (nadjenPredmetKomSmetaOS) { Application.Current.Dispatcher.Invoke(() => { notifierError.ShowError("Ne možete promeniti operativni sistem softvera \njer se on koristi na predmetu gde nije podržan \nizabrani operativni sistem!"); }); return(false); } else { // ukoliko ne postoji problem za izmenu OS softvera u pogledu sa poklapanjem OS na predmetima // koji koriste taj softver, proveravamo poklapanje izmedju softvera i ucionica koje ga koriste foreach (Ucionica u in racunarskiCentar.Ucionice.Values) { if (zeljeniOS == "Windows") { if (u.OperativniSistem == "Linux" && u.InstaliraniSoftveri.Contains(oznaka) && !u.Obrisan) { // nije dozvoljena promena OS softvera na windows, ako medju ucionicama u kojima se koristi // postoji neka koja ima OS linux nadjenaUcionicaKojojSmetaOS = true; break; } } else if (zeljeniOS == "Linux") { if (u.OperativniSistem == "Windows" && u.InstaliraniSoftveri.Contains(oznaka) && !u.Obrisan) { // nije dozvoljena promena OS softvera na linux, ako medju ucionicama u kojima se koristi // postoji neka koja ima OS windows nadjenaUcionicaKojojSmetaOS = true; break; } } } if (nadjenaUcionicaKojojSmetaOS) { Application.Current.Dispatcher.Invoke(() => { notifierError.ShowError("Ne možete promeniti operativni sistem softvera \njer se on koristi u učionici gde nije intaliran \nizabrani operativni sistem!"); }); return(false); } // ako nema ni predmeta ni ucionice kojoj smeta promenja OS softvera, onda je data dozvola za izmenu return(true); } }
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; }; } }