// 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 potvrzování rozhodnutí hodnocení private void Confirmer_Clicked(object sender, EventArgs e) { // zabalí a pošle hodnocení Classes.Ratinging NewRatinging = new Classes.Ratinging { Rate = int.Parse(RatingSlider.Value.ToString()), RecordID = ToRate[NumberLastRated].Id, RaterUserID = LUDB.WhoLogged().Id }; LRDB.SaveRating(NewRatinging); NumberLastRated++; Next_Rating(); }
// 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 = ""; } } }
// 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(); } }
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/ }