public MainPage () { InitializeComponent (); BindingContext = new { SvgAssembly = typeof(App).GetTypeInfo ().Assembly, CanvasHeight = App.CanvasHeight }; NavigationPage.SetHasNavigationBar(this, false); //TapGestureRecognizer crossTapGestureRecognizer = new TapGestureRecognizer(); TapGestureRecognizer canvasTapGestureRecognizer = new TapGestureRecognizer(); PanGestureRecognizer canvasPanGestureRecognizer = new PanGestureRecognizer(); // crossTapGestureRecognizer.Tapped += (object sender, EventArgs e) => { // ChangeTempWindow.Hide(); // ChangeGeoWindow.Hide(); // }; ArrowsInitialize (); ChangeTempWindow.Initialize (); //ChangeTempWindowCross.GestureRecognizers.Add (crossTapGestureRecognizer); ChangeGeoWindow.Initialize (); //ChangeGeoWindowCross.GestureRecognizers.Add (crossTapGestureRecognizer); ClothWindow.Initialize (true); HeadClickZone.GestureRecognizers.Add (canvasTapGestureRecognizer); BodyClickZone.GestureRecognizers.Add (canvasTapGestureRecognizer); PantsClickZone.GestureRecognizers.Add (canvasTapGestureRecognizer); ShoesClickZone.GestureRecognizers.Add (canvasTapGestureRecognizer); HeadClickZone.GestureRecognizers.Add (canvasPanGestureRecognizer); BodyClickZone.GestureRecognizers.Add (canvasPanGestureRecognizer); PantsClickZone.GestureRecognizers.Add (canvasPanGestureRecognizer); ShoesClickZone.GestureRecognizers.Add (canvasPanGestureRecognizer); ColorPickerWindow.Initialize (false, true); AllColorsButton.Clicked += (object sender, EventArgs e) => { ColorPickerWindow.Show(); }; canvasTapGestureRecognizer.Tapped += (object sender, EventArgs e) => { ClothType type = ClothType.Head; if(sender.Equals(HeadClickZone)) type = ClothType.Head; if(sender.Equals(BodyClickZone)) type = ClothType.Body; if(sender.Equals(PantsClickZone)) type = ClothType.Pants; if(sender.Equals(ShoesClickZone)) type = ClothType.Shoes; if(DBClothes(type).Count == 0) return; if(type == ClothType.Head && DBHeads[CurrentHead].Id == 142) return; if(type == ClothType.Pants && DBBodies[CurrentBody].IsDress) return; ClothWindow.Type = type; ClothWindowSvgContainer.Content = new CWCloth { SvgPath = "ClothesAndWeather.Images.ClothesDB." + DBClothes(type) [CurrentCloth(type)].ImagePreview, Color = ((CWCloth)ClothView(type).Content).Color, HorizontalOptions = LayoutOptions.Center, VerticalOptions = LayoutOptions.Center, WidthRequest = 120, HeightRequest = 120, Aspect = Aspect.AspectFit }; ClothTitleLabel.Text = DBClothes(type) [CurrentCloth(type)].Name; ClothDescLabel.Text = DBClothes(type) [CurrentCloth(type)].Description; List<ClothExample> examples = Sex == Sex.Male ? DBClothes(type) [CurrentCloth(type)].ManClothes : DBClothes(type) [CurrentCloth(type)].WomanClothes; if(examples == null) examples = new List<ClothExample>(); ClothExamples.Children.Clear(); ClothExamples.Children.Add(new Label { Text = "Похожие вещи в магазине:", FontSize = 12 }); StackLayout line = new StackLayout(); for(var i = 0; i < examples.Count; i++) { if(i % 2 == 0) line = new StackLayout { Orientation = StackOrientation.Horizontal, Spacing = 25, HorizontalOptions = LayoutOptions.Center }; var frame = new CWClothExample(); frame.Content = new Image { HorizontalOptions = LayoutOptions.Center, VerticalOptions = LayoutOptions.Center, Aspect = Aspect.AspectFit, Source = ImageSource.FromUri(new Uri("http:" + examples[i].Image)) }; var recognizer = new TapGestureRecognizer(); string link = examples[i].Link; recognizer.Tapped += (object sender1, EventArgs e1) => { App.IOSAppDelegate.OpenUrlInBrowser(Utils.AdmitadLink(link)); }; frame.GestureRecognizers.Add(recognizer); line.Children.Add(frame); if(i == examples.Count - 1 && i % 2 == 0) { line.WidthRequest = (frame.WidthRequest + frame.Padding.Left + frame.Padding.Right) * 2 + line.Spacing; frame.HorizontalOptions = LayoutOptions.Start; } if(i % 2 == 1 || i == examples.Count - 1) ClothExamples.Children.Add(line); } ClothWindow.Show(); }; PanUpdatedEventArgs lastPan = new PanUpdatedEventArgs(GestureStatus.Completed, 0, 0, 0); canvasPanGestureRecognizer.PanUpdated += (object sender, PanUpdatedEventArgs e) => { ClothType type = ClothType.Head; if(sender.Equals(HeadClickZone)) type = ClothType.Head; if(sender.Equals(BodyClickZone)) type = ClothType.Body; if(sender.Equals(PantsClickZone)) type = ClothType.Pants; if(sender.Equals(ShoesClickZone)) type = ClothType.Shoes; if(e.StatusType == GestureStatus.Completed) { double x = lastPan.TotalX; double y = lastPan.TotalY; System.Diagnostics.Debug.WriteLine(x + " " + y); if(Math.Abs(y) <= 25 && Math.Abs(x) >= 40) { CallArrow(Arrow(type, (int)(x / Math.Abs(x)))); } } lastPan = e; }; Action<object, EventArgs> changePreviewColor = (object sender, EventArgs e) => { ClothWindowSvgContainer.Content = new CWCloth { SvgPath = ((CWCloth)ClothWindowSvgContainer.Content).SvgPath, Color = ((Button)sender).BackgroundColor, HorizontalOptions = LayoutOptions.Center, VerticalOptions = LayoutOptions.Center, WidthRequest = 120, HeightRequest = 120, Aspect = Aspect.AspectFit }; }; BlackColorButton.Clicked += (object sender, EventArgs e) => { changePreviewColor.Invoke(sender, e); }; WhiteColorButton.Clicked += (object sender, EventArgs e) => { changePreviewColor.Invoke(sender, e); }; for (int i = 0; i < ColorsGrid.Children.Count; i++) { ((Button)ColorsGrid.Children[i]).Clicked += (object sender, EventArgs e) => { changePreviewColor.Invoke(sender, e); ColorPickerWindow.Hide(); }; } ColorReadyButton.Clicked += (object sender, EventArgs e) => { SwitchClothColor((ClothType)ClothWindow.Type, ((CWCloth)ClothWindowSvgContainer.Content).Color); ClothWindow.Hide(); }; // ClothesOnlineButton.Clicked += (object sender, EventArgs e) => { // Cloth cloth = DBClothes((ClothType)ClothWindow.Type)[CurrentCloth((ClothType)ClothWindow.Type)]; // App.IOSAppDelegate.OpenUrlInBrowser(cloth.GetLamodaLink(Sex)); // }; #region BottomMenu TapGestureRecognizer menuTapGestureRecognizer = new TapGestureRecognizer(); TapGestureRecognizer menu3TapGestureRecognizer = new TapGestureRecognizer(); switch (Sex) { case Sex.Male: ((SvgImage)menu3.Content).SvgPath = "ClothesAndWeather.Images.menu3m.svg"; break; case Sex.Female: ((SvgImage)menu3.Content).SvgPath = "ClothesAndWeather.Images.menu3f.svg"; break; } menu1.GestureRecognizers.Add (menuTapGestureRecognizer); TempLabel.GestureRecognizers.Add(menuTapGestureRecognizer); WeatherConditionImage.GestureRecognizers.Add(menuTapGestureRecognizer); menu4.GestureRecognizers.Add (menuTapGestureRecognizer); CityAndDT.GestureRecognizers.Add (menuTapGestureRecognizer); menuTapGestureRecognizer.Tapped += (object sender, EventArgs e) => { //SvgImage btn = (SvgImage)sender; var btn = sender; if(btn.Equals(menu1) || btn.Equals(TempLabel) || btn.Equals(WeatherConditionImage)) { ChangeTempWindow.Show(); } else if(btn.Equals(menu4) || btn.Equals(CityAndDT)) { ChangeGeoWindow.Show(); } }; menu3.GestureRecognizers.Add (menu3TapGestureRecognizer); menu3TapGestureRecognizer.Tapped += (object sender, EventArgs e) => { string newpath = ""; switch(Sex) { case Sex.Male: newpath = "ClothesAndWeather.Images.menu3f.svg"; App.SetSex(Sex.Female); break; case Sex.Female: newpath = "ClothesAndWeather.Images.menu3m.svg"; App.SetSex(Sex.Male); break; } menu3.Content = new SvgImage { SvgPath = newpath, SvgAssembly = typeof(App).GetTypeInfo().Assembly }; RefreshFilters(); }; PlacePicker.Unfocused += async (object sender, FocusEventArgs e) => { switch(PlacePicker.SelectedIndex) { case 0: App.SetPlace(Place.Walk); await Navigation.PushModalAsync(new SelectWalkTimePage(false), false); break; case 1: App.SetPlace(Place.Business); RefreshFilters(); break; case 2: App.SetPlace(Place.Formal); RefreshFilters(); break; case 3: App.SetPlace(Place.Celebration); RefreshFilters(); break; case 4: App.SetPlace(Place.Sport); RefreshFilters(); break; } }; #endregion #region TempAndCityWindows SetUserTemp.Clicked += (object sender, EventArgs e) => { if(String.IsNullOrEmpty(UserTemp.Text) || UserWeatherTagPicker.SelectedIndex == -1) { if(String.IsNullOrEmpty(UserTemp.Text)) HighlightView(UserTemp); if(UserWeatherTagPicker.SelectedIndex == -1) HighlightView(UserWeatherTagPicker); return; } try { Temperature = Convert.ToInt32(UserTemp.Text); } catch(Exception ex) { HighlightView(UserTemp); return; } if(Temperature < -50 || Temperature > 40) { HighlightView(UserTemp); return; } UserTemp.Unfocus(); TempLabel.Text = Temperature + " °C"; WeatherTag = Utils.PickerValueToTag (UserWeatherTagPicker.SelectedIndex); WeatherConditionImage.Content = new SvgImage { SvgPath = "ClothesAndWeather.Images.Tags." + WeatherTag + ".svg", SvgAssembly = typeof(App).GetTypeInfo ().Assembly }; RefreshFilters(); ChangeTempWindow.Hide(); }; SetAutoTemp.Clicked += (object sender, EventArgs e) => { GetOpenWeatherData (() => { RefreshFilters (); ChangeTempWindow.Hide(); }, () => { }, true); }; SetUserCity.Clicked += (object sender, EventArgs e) => { if(String.IsNullOrEmpty(UserCity.Text)) { HighlightView(UserCity); return; } UserCity.Unfocus(); string oldCity = City; City = UserCity.Text; GetOpenWeatherData (() => { CityLabel.Text = City; RefreshFilters (); ChangeGeoWindow.Hide(); }, () => { HighlightView(UserCity); City = oldCity; }, false); GetTimeByCity(() => {}); }; SetAutoCity.Clicked += (object sender, EventArgs e) => { GetGoogleCityName (); GetOpenWeatherData (() => { TimeZone = null; DTSwitchOnce(); RefreshFilters(); ChangeGeoWindow.Hide(); }, () => { }, true); }; #endregion #region Arrows TapGestureRecognizer clothesArrowsTapGestureRecognizer = new TapGestureRecognizer(); HeadLeft.GestureRecognizers.Add(clothesArrowsTapGestureRecognizer); HeadRight.GestureRecognizers.Add(clothesArrowsTapGestureRecognizer); BodyLeft.GestureRecognizers.Add(clothesArrowsTapGestureRecognizer); BodyRight.GestureRecognizers.Add(clothesArrowsTapGestureRecognizer); PantsLeft.GestureRecognizers.Add(clothesArrowsTapGestureRecognizer); PantsRight.GestureRecognizers.Add(clothesArrowsTapGestureRecognizer); ShoesLeft.GestureRecognizers.Add(clothesArrowsTapGestureRecognizer); ShoesRight.GestureRecognizers.Add(clothesArrowsTapGestureRecognizer); clothesArrowsTapGestureRecognizer.Tapped += (object sender, EventArgs e) => { CWArrow btn = (CWArrow)sender; CallArrow(btn); }; #endregion EnableDTSwitch (); GetGoogleCityName (); GetOpenWeatherData (() => { RefreshFilters (); }, () => { }, true); }
public void GetOpenWeatherData(Action callback, Action exceptionCallback, bool byCoords) { WeatherConditionImage.Content = new ActivityIndicator { IsRunning = true, Color = Color.White }; if (byCoords) { ((App)App.Current).GetWeatherByCoordinates ((OpenWeatherData result) => { try { Temperature = (int)Math.Round (result.Meteorology.CelsiusTemperature); TempLabel.Text = Temperature + " °C"; WeatherTag = Utils.OpenWeatherDataToTag (result.Weather [0]); WeatherConditionImage.Content = new SvgImage { SvgPath = "ClothesAndWeather.Images.Tags." + WeatherTag + ".svg", SvgAssembly = typeof(App).GetTypeInfo ().Assembly }; callback.Invoke (); } catch { exceptionCallback.Invoke(); } }); } else { ((App)App.Current).GetWeatherByCity ((OpenWeatherData result) => { try { Temperature = (int)Math.Round (result.Meteorology.CelsiusTemperature); TempLabel.Text = Temperature + " °C"; WeatherTag = Utils.OpenWeatherDataToTag (result.Weather [0]); WeatherConditionImage.Content = new SvgImage { SvgPath = "ClothesAndWeather.Images.Tags." + WeatherTag + ".svg", SvgAssembly = typeof(App).GetTypeInfo ().Assembly }; callback.Invoke (); } catch { exceptionCallback.Invoke(); } }, City); } }