// funkce pro zrušení aktuálního určenýho záznamu
        private void Nanana_Defocused(object sender, EventArgs e)
        {
            // tak se vymažou všechny předvyplněné údaje
            RaceInput.IsVisible = true;
            GivenRace.IsVisible = false;
            int        countOfRecord     = 0;
            List <int> countersOfRecords = new List <int>();

            foreach (var Children in Names_Stack.Children)
            {
                if (Children is SfAutoComplete)
                {
                    Children.IsVisible = true;
                }
                else
                {
                    countersOfRecords.Add(countOfRecord);
                }
                countOfRecord++;
            }
            countersOfRecords.Reverse();
            foreach (int recordID in countersOfRecords)
            {
                Names_Stack.Children.Remove(Names_Stack.Children[recordID]);
            }
            ;
            // a nechají se objevit zadávací místa
            Selected    = null;
            AlredyRated = null;
        }
 // funkce tlačítka na zaslání zánamu a jeho jmen a hodnocení
 private void Confirm_Clicked(object sender, EventArgs e)
 {
     // pokud je to nový záznam
     if (Selected == null)
     {
         // pokud je zadáno hlavní jméno a živočišný druh
         if ((Names_Stack.Children[0] as SfAutoComplete).Text != null && RaceInput.Text != null)
         {
             //Tak vložit svých do objektů
             // Nový záznam
             Classes.Record Newbie = new Classes.Record
             {
                 Race           = RaceInput.Text,
                 IsLinkedToUSer = false
             };
             // Nový hodncení
             Classes.Ratinging NewRating = new Classes.Ratinging
             {
                 Rate        = int.Parse(RatingSlider.Value.ToString()),
                 RaterUserID = LUDB.WhoLogged().Id
             };
             // A všecna jeho jména které jsou zadána
             List <Classes.Namies> NewNamies = new List <Classes.Namies>();
             int NameNumber = 0;
             foreach (var InputNames in Names_Stack.Children)
             {
                 NameNumber++;
                 if (NameNumber == 1)
                 {
                     NewNamies.Add(new Classes.Namies {
                         Name = (InputNames as SfAutoComplete).Text
                     });
                 }
                 else
                 {
                     if (((InputNames as StackLayout).Children[0] as Entry).Text != null)
                     {
                         NewNamies.Add(new Classes.Namies {
                             Name = ((InputNames as StackLayout).Children[0] as Entry).Text
                         });
                     }
                     else
                     {
                         // pokud políčko jména, které není hlavní, je prázné, tak se nepřidá do objektu a upozorní se atuální uživatel
                         DisplayAlert("", "Přídavné políčko jména nebylo vyplněno.", "OK");
                     }
                 }
             }
             // pokud hodnotí sebe
             if (Himself)
             {
                 // tak se záznam spojí s jeho uživatelským záznamem
                 Newbie.LinkedUserID   = LUDB.WhoLogged().Id;
                 Newbie.IsLinkedToUSer = true;
                 // a celí se to pošle
                 LRDB.SaveNewUsersRecord(Newbie, NewNamies);
             }
             else
             {
                 // pokud nehodnotí sebe, tak se to už pošle
                 LRDB.SaveNewRecord(Newbie, NewNamies, NewRating);
             }
         }
         else
         {
             // pokud není hlavní jméno nebo živočišný druh zadán tak e upozorní aktualní uživatel
             DisplayAlert("", "Jméno a rasa musejí být vyplněný.", "OK");
         }
     }
     // pokud už záznam exituje
     else
     {
         // pokud zaznamenává sebe
         if (Himself)
         {
             // tak se existujícímu záznamu připíše aktuální uživatel
             Selected.LinkedUserID   = LUDB.WhoLogged().Id;
             Selected.IsLinkedToUSer = true;
             LRDB.RecordHaveRegistered(Selected);
         }
         // pokud upravuje záznam někoho jinýho
         else
         {
             // tak pokud nebyl záznam ještě hodnocen aktuáním uživatelem
             if (AlredyRated == null)
             {
                 // tak se zapíše nové hodnocení tohoto záznamu od aktuálního uživatele
                 Classes.Ratinging newRating = new Classes.Ratinging
                 {
                     Rate        = int.Parse(RatingSlider.Value.ToString()),
                     RaterUserID = LUDB.WhoLogged().Id,
                     RecordID    = Selected.Id
                 };
                 LRDB.SaveRating(newRating);
             }
             // pokud už byl hodnocen aktuáním uživatelem
             else
             {
                 // tak se jen změní
                 AlredyRated.Rate = int.Parse(RatingSlider.Value.ToString());
                 LRDB.UpdateRating(AlredyRated);
             }
         }
         // zkontoluje se jestli nebylo zadáno nevé jméno, pokud jo, tak se nevé jména zabalí do objektu a zapaíšou
         foreach (var InputNames in Names_Stack.Children)
         {
             if (InputNames is StackLayout)
             {
                 if ((InputNames as StackLayout).Children[0] is Entry)
                 {
                     Classes.Namies newName = new Classes.Namies {
                         Name = ((InputNames as StackLayout).Children[0] as Entry).Text, RecordID = Selected.Id
                     };
                     LRDB.SaveNewName(newName);
                 }
             }
         }
     }
     // poté se stránka uzavře
     if (Himself)
     {
         Navigation.PopModalAsync();
         Navigation.PopModalAsync();
         Navigation.PopModalAsync();
     }
     else
     {
         Navigation.PopAsync();
     }
 }
 // pokud uživatel zapsal nové jméno
 private void Nanana_Unfocused(object sender, FocusEventArgs e)
 {
     //, tak zkontrolujeme, jestli jméno nepatří již nějakému záznamu
     foreach (Classes.Namies name in Names)
     {
         // pokud patří nějakému záznamu a pokud hodnozí sebe atento záznam nikomu nepatří a jestli záznam nepatří jemu samontnému.
         if (Nanana.Text == name.Name && (!Himself || (Himself && !LRDB.FindRecord(name.RecordID).IsLinkedToUSer)) && LRDB.FindRecord(name.RecordID).Id != LUDB.WhoLogged().Id)
         {
             // tak předzadej všechny prvky a shovej místa pro doplnění
             Selected = LRDB.FindRecord(name.RecordID);
             foreach (var Children in Names_Stack.Children)
             {
                 if (Children is SfAutoComplete)
                 {
                     Children.IsVisible = false;
                 }
                 else if (Children is Entry)
                 {
                     Names_Stack.Children.Remove(Children);
                 }
             }
             RaceInput.IsVisible = false;
             GivenRace.IsVisible = true;
             int NameRNumber = 0;
             foreach (Classes.Namies nameR in Names)
             {
                 if (nameR.RecordID == Selected.Id)
                 {
                     if (NameRNumber == 0)
                     {
                         StackLayout newStackLayout = new StackLayout
                         {
                             Orientation       = StackOrientation.Horizontal,
                             VerticalOptions   = LayoutOptions.Start,
                             HorizontalOptions = LayoutOptions.Fill
                         };
                         Label NewLabel = new Label
                         {
                             Text              = nameR.Name,
                             FontSize          = Device.GetNamedSize(NamedSize.Medium, typeof(Label)),
                             VerticalOptions   = LayoutOptions.StartAndExpand,
                             HorizontalOptions = LayoutOptions.FillAndExpand
                         };
                         Button newButton = new Button
                         {
                             Text              = "X",
                             TextColor         = Color.Red,
                             FontAttributes    = FontAttributes.Bold,
                             FontSize          = Device.GetNamedSize(NamedSize.Medium, typeof(Label)),
                             HorizontalOptions = LayoutOptions.End,
                             VerticalOptions   = LayoutOptions.CenterAndExpand,
                         };
                         newButton.Clicked += Nanana_Defocused;
                         newStackLayout.Children.Add(NewLabel);
                         newStackLayout.Children.Add(newButton);
                         Names_Stack.Children.Add(newStackLayout);
                     }
                     else
                     {
                         Label NewLabel = new Label
                         {
                             Text              = nameR.Name,
                             VerticalOptions   = LayoutOptions.Start,
                             HorizontalOptions = LayoutOptions.Fill,
                             FontSize          = Device.GetNamedSize(NamedSize.Medium, typeof(Label))
                         };
                         Names_Stack.Children.Add(NewLabel);
                     }
                     NameRNumber++;
                 }
             }
             GivenRace.Text = Selected.Race;
             AlredyRated    = LRDB.GetUsersRatingOfRecord(Selected.Id, LUDB.WhoLogged().Id);
             if (AlredyRated != null)
             {
                 RatingSlider.Value = AlredyRated.Rate;
             }
         }
         // pokud má zaznamenat svůj záznama někdo už je za tento záznam zaznamenán
         else if (Nanana.Text == name.Name && Himself && LRDB.FindRecord(name.RecordID).IsLinkedToUSer)
         {
             // tak se upozorní uživatel a zruší se výběr
             DisplayAlert("", "Jako tento záznam už je někdo zaregistrovaný.", "OK");
             Nanana.Text = "";
         }
         // pokud uživatel vybere na hodnocení sebe
         else if (Nanana.Text == name.Name && LRDB.FindRecord(name.RecordID).Id == LUDB.WhoLogged().Id)
         {
             // tak se upozorní uživatel a zruší se výběr
             DisplayAlert("", "Nemůžete hodnotit sám sebe", "OK");
             Nanana.Text = "";
         }
     }
 }
Пример #4
0
        public Comparison(List <Classes.Namies> selected, int levelOfSearch)
        {
            InitializeComponent();
            // předávání upotřebné urovně přátelství
            LevelOfSearch = levelOfSearch;
            // přidávání přihlášeného uživatele a zadaných záznamů do seznamu záznamů pro hodnocení
            bool UserInThere = false;

            Selected.Add(LRDB.GetUsersRecord(LUDB.WhoLogged().Id));
            foreach (Classes.Namies Import in selected)
            {
                Classes.Record Importee = LRDB.FindRecord(Import.RecordID);
                // kontrola jestli jeden ze zadaných záznamů není přihlášený uživatel
                if (Importee.Id != LRDB.GetUsersRecord(LUDB.WhoLogged().Id).Id)
                {
                    Selected.Add(Importee);
                }
            }
            // hledánní potřebných záznamů podle zadaných parametrů a záznamů
            foreach (Classes.Namies Select in selected)
            {
                // najdi ID uživatele který koresponduje se zadaným záznamem
                int SelectedID = LRDB.GetUsersIDFromNamesID(Select.RecordID);
                // pokud takový uživatel existuje
                if (SelectedID != -1)
                {
                    // najdi všechny záznamy tohoto uživatele, dle zadaný úrovně přáteství
                    foreach (Classes.Ratinging rated in LRDB.GetUsersRatings(SelectedID))
                    {
                        bool isVanted = false;
                        if (LevelOfSearch == 1)
                        {
                            if (rated.Rate > 20)
                            {
                                isVanted = true;
                            }
                        }
                        if (LevelOfSearch == 2)
                        {
                            if (rated.Rate > 50)
                            {
                                isVanted = true;
                            }
                        }
                        if (LevelOfSearch == 3)
                        {
                            if (rated.Rate > 70)
                            {
                                isVanted = true;
                            }
                        }
                        // pokud je již v seznamu k hodnocení, tak se nepřidá
                        foreach (Classes.Namies Selecties in selected)
                        {
                            if (Selecties.RecordID == rated.RecordID)
                            {
                                isVanted = false;
                            }
                        }
                        foreach (Classes.Record vanted in Selected)
                        {
                            if (vanted.Id == rated.RecordID)
                            {
                                isVanted = false;
                            }
                        }
                        if (isVanted)
                        {
                            Selected.Add(LRDB.FindRecord(rated.RecordID));
                        }
                    }
                }
            }

            foreach (Classes.Record Showing in Selected)
            {
                // pro každýho v seznamu k hodnocení se vytvoří záznam
                Frame Peel = new Frame {
                    Padding = new Thickness(5, 5, 5, 5), BorderColor = Color.Black
                };
                StackLayout Crust = new StackLayout {
                    Orientation = StackOrientation.Horizontal
                };
                Button Hide = new Button {
                    WidthRequest = 40, HeightRequest = 40, ClassId = Showing.Id.ToString(), HorizontalOptions = LayoutOptions.EndAndExpand, Text = "X", TextColor = Color.Red, FontAttributes = FontAttributes.Bold, VerticalOptions = LayoutOptions.CenterAndExpand
                };
                Hide.Clicked += Hide_Clicked;
                Button Unhide = new Button {
                    WidthRequest = 40, HeightRequest = 40, ClassId = Showing.Id.ToString(), IsVisible = false, HorizontalOptions = LayoutOptions.EndAndExpand, Text = "V", TextColor = Color.Green, FontAttributes = FontAttributes.Bold, VerticalOptions = LayoutOptions.CenterAndExpand
                };
                Unhide.Clicked += Unhide_Clicked;
                ScrollView Shell = new ScrollView {
                    Orientation = ScrollOrientation.Horizontal
                };
                StackLayout Seed = new StackLayout
                {
                    Orientation       = StackOrientation.Horizontal,
                    HorizontalOptions = LayoutOptions.Start,
                    VerticalOptions   = LayoutOptions.Center
                };
                Label Name = new Label
                {
                    TextColor = Color.Black,
                    FontSize  = Device.GetNamedSize(NamedSize.Medium, typeof(Label)),
                    Text      = LRDB.GetName(Showing.Id).Name
                };

                Seed.Children.Add(Name);
                // pokud tento záznam není spojený s uživatelem tak to oznámit aktualně hledajícímu uživately
                if (!Showing.IsLinkedToUSer)
                {
                    DisplayAlert("", "Záznam " + LRDB.GetName(Showing.Id).Name + " Není ještě spojený s uživatelem. Prosím, přiveďte tohoto tvora, kterýmu patří tento záznam, na tuto aplikaci. ", "OK");
                }
                // Najít hodnocení na tento záznam od ostatních záznamů
                foreach (Classes.Record Rating in Selected)
                {
                    if (Showing != Rating)
                    {
                        // pokud je tento hodnotící záznam připojený k uživately, tak přidej jeho hodnocení k tomuto záznamu který je honocen
                        if (Rating.IsLinkedToUSer)
                        {
                            Button            button = new Button();
                            Classes.Ratinging rating = LRDB.GetUsersRatingOfRecord(Showing.Id, Rating.LinkedUserID);
                            // pokud ještě není hodnocen tímto uživatelem, tak vytvoř bílí tlačítko
                            if (rating == null)
                            {
                                button = new Button
                                {
                                    BorderColor     = Color.Black,
                                    WidthRequest    = 40,
                                    HeightRequest   = 40,
                                    BorderWidth     = 3,
                                    ClassId         = Rating.Id.ToString(),
                                    BackgroundColor = Color.FromRgb(255, 255, 255)
                                };
                            }
                            else
                            {
                                button = new Button();
                                // pokud je hodnocení pozitvní ubírej ze žlutého tlačítka červenou barvu
                                if (rating.Rate > 0)
                                {
                                    int RRGB = 255;
                                    int RGBT = int.Parse((Math.Round((rating.Rate * 2.55), 0, MidpointRounding.ToEven)).ToString());
                                    RRGB   = RRGB - RGBT;
                                    button = new Button
                                    {
                                        BorderColor     = Color.Black,
                                        WidthRequest    = 40,
                                        HeightRequest   = 40,
                                        BorderWidth     = 3,
                                        ClassId         = Rating.Id.ToString(),
                                        BackgroundColor = Color.FromRgb(RRGB, 255, 0)
                                    };
                                }
                                // pokud je hodnocení negativní ubírej ze žlutého tlačítka zelenou barvu
                                else if (rating.Rate < 0)
                                {
                                    int GRGB = 255;
                                    int RGBT = int.Parse((Math.Round((rating.Rate * 2.55), 0, MidpointRounding.ToEven)).ToString());
                                    GRGB   = GRGB + RGBT;
                                    button = new Button
                                    {
                                        BorderColor     = Color.Black,
                                        WidthRequest    = 40,
                                        HeightRequest   = 40,
                                        BorderWidth     = 3,
                                        ClassId         = Rating.Id.ToString(),
                                        BackgroundColor = Color.FromRgb(255, GRGB, 0)
                                    };
                                }
                                // pokud je hodnocení neutrální necháme tlačítko žluté
                                else
                                {
                                    button = new Button
                                    {
                                        BorderColor     = Color.Black,
                                        WidthRequest    = 40,
                                        HeightRequest   = 40,
                                        BorderWidth     = 3,
                                        ClassId         = Rating.Id.ToString(),
                                        BackgroundColor = Color.FromRgb(255, 255, 0)
                                    };
                                }
                            }
                            // značení tlačítek
                            bool WasSelected = false;
                            // pokud je tlačítko vytvořený z honocení aktuálně hledajícího uživatele
                            if (Rating.Id == LRDB.GetUsersRecord(LUDB.WhoLogged().Id).Id)
                            {
                                // Tak do talčítka přidat text "Ty"
                                button.Text           = "Ty";
                                button.FontSize       = Device.GetNamedSize(NamedSize.Micro, typeof(Label));
                                button.FontAttributes = FontAttributes.Bold;
                                WasSelected           = true;
                            }
                            // pokud tlačítko není vytvoření z hodnocení z původních zadaných záznamů nebo právš hledajícího uživatele
                            foreach (Classes.Namies Firstly in selected)
                            {
                                if (Firstly.RecordID == Rating.Id)
                                {
                                    WasSelected = true;
                                }
                            }
                            if (!WasSelected)
                            {
                                // tak vytvoř z tlačítka kruh
                                button.CornerRadius = 20;
                            }
                            button.Clicked += Hide_Clicked;
                            Seed.Children.Add(button);
                        }
                    }
                }

                Shell.Content = Seed;
                Crust.Children.Add(Shell);
                Crust.Children.Add(Hide);
                Crust.Children.Add(Unhide);
                Peel.Content = Crust;
                Names_Stack.Children.Add(Peel);
            }
            // https://stackoverflow.com/questions/46012446/change-xamarin-forms-button-color
            //https://www.geeksforgeeks.org/c-sharp-math-round-method-set-2/
        }