示例#1
0
        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);
        }
示例#2
0
 public bool DodajUcionicu(Ucionica novaUcionica)
 {
     if (ucionice.ContainsKey(novaUcionica.Oznaka))
     {
         return(false);
     }
     this.ucionice.Add(novaUcionica.Oznaka, novaUcionica);
     Console.WriteLine("Ucionica: " + ucionice.Count);
     return(true);
 }
示例#3
0
        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;
        }
示例#4
0
        private bool validacijaBrojaRadnihMesta()
        {
            Ucionica staraUcionica = racunarskiCentar.Ucionice[oznakaUcioniceZaIzmenu];

            if (staraUcionica.BrojRadnihMesta == int.Parse(brojRadnihMestaUcionica.Text.Trim()))
            {
                return(true);
            }
            int           noviBrMesta         = int.Parse(brojRadnihMestaUcionica.Text.Trim());
            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> predmetiKojiZahtevajuBrojMesta = new List <string>();

            foreach (string poz in sviPredmetiUcionice)
            {
                if (racunarskiCentar.Predmeti[poz].VelicinaGrupe > noviBrMesta)
                {
                    predmetiKojiZahtevajuBrojMesta.Add(poz);
                }
            }

            List <string> predmetiKojiZahtevajuBrojMestaBezDupl = predmetiKojiZahtevajuBrojMesta.Distinct().ToList();

            if (predmetiKojiZahtevajuBrojMestaBezDupl.Count > 0)
            {
                PotvrdaIzmene potvrda = new PotvrdaIzmene();
                potvrda.Title = "Nedovoljno mesta";
                potvrda.PorukaBrisanja.Text = "Da li ste sigurni?\n\nUkoliko potvrdite izmenu, sledeci predmeti ce se ukloniti iz rasporeda"
                                              + " u ucionici zbog nedostatka mesta u ucionici:\n";
                List <string> kljuceviPolja = new List <string>();
                for (int i = 0; i < predmetiKojiZahtevajuBrojMestaBezDupl.Count; i++)
                {
                    potvrda.PorukaBrisanja.Text += "\n" + (i + 1) + ". " + predmetiKojiZahtevajuBrojMestaBezDupl[i];
                    foreach (KalendarPolje polje in racunarskiCentar.PoljaKalendara.Values)
                    {
                        if (polje.NazivPolja.Split('-')[0].Trim().Equals(predmetiKojiZahtevajuBrojMestaBezDupl[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 predmetiKojiZahtevajuBrojMesta)
                    {
                        racunarskiCentar.Predmeti[poz].PreostaliTermini++;
                    }
                }
                else
                {
                    return(false);
                }
            }
            staraUcionica.BrojRadnihMesta = int.Parse(brojRadnihMestaUcionica.Text.Trim());
            return(true);
        }
示例#5
0
        private bool validacijaIzmeneProjektora()
        {
            Ucionica staraUcionica = racunarskiCentar.Ucionice[oznakaUcioniceZaIzmenu];

            if (prisustvoProjektoraUcionica.IsChecked)
            {
                staraUcionica.PrisustvoProjektora = prisustvoProjektoraUcionica.IsChecked;
                staraUcionica.ProjektorString     = staraUcionica.PrisustvoProjektora ? "prisutan" : "nije prisutan";
                return(true);
            }
            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> predmetiKojiZahtevajuProjektor = new List <string>();

            foreach (string poz in sviPredmetiUcionice)
            {
                if (racunarskiCentar.Predmeti[poz].NeophodanProjektor)
                {
                    predmetiKojiZahtevajuProjektor.Add(poz);
                }
            }

            List <string> predmetiKojiZahtevajuProjektorBezDupl = predmetiKojiZahtevajuProjektor.Distinct().ToList();

            if (predmetiKojiZahtevajuProjektorBezDupl.Count > 0)
            {
                PotvrdaIzmene potvrda = new PotvrdaIzmene();
                potvrda.Title = "Nedostatak projektora";
                potvrda.PorukaBrisanja.Text = "Da li ste sigurni?\n\nUkoliko potvrdite izmenu, sledeci predmeti ce se ukloniti iz rasporeda"
                                              + " u ucionici zbog nedostatka projektora:\n";
                List <string> kljuceviPolja = new List <string>();
                for (int i = 0; i < predmetiKojiZahtevajuProjektorBezDupl.Count; i++)
                {
                    potvrda.PorukaBrisanja.Text += "\n" + (i + 1) + ". " + predmetiKojiZahtevajuProjektorBezDupl[i];
                    foreach (KalendarPolje polje in racunarskiCentar.PoljaKalendara.Values)
                    {
                        if (polje.NazivPolja.Split('-')[0].Trim().Equals(predmetiKojiZahtevajuProjektorBezDupl[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 predmetiKojiZahtevajuProjektor)
                    {
                        racunarskiCentar.Predmeti[poz].PreostaliTermini++;
                    }
                }
                else
                {
                    return(false);
                }
            }
            staraUcionica.PrisustvoProjektora = prisustvoProjektoraUcionica.IsChecked;
            staraUcionica.ProjektorString     = staraUcionica.PrisustvoProjektora ? "prisutan" : "nije prisutan";
            return(true);
        }
示例#6
0
        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);
        }
示例#7
0
        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();
            }
        }
示例#8
0
        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();
            }
        }