Mini Kabibi Habibi

Current Path : C:/Users/Public/Documents/DXperience 13.1 Demos/WinForms/VB/MapMainDemo/Modules/
Upload File :
Current File : C:/Users/Public/Documents/DXperience 13.1 Demos/WinForms/VB/MapMainDemo/Modules/WorldWeather.vb

Imports Microsoft.VisualBasic
Imports System
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Collections.Generic
Imports DevExpress.Utils
Imports System.Xml.Linq

Namespace DevExpress.XtraMap.Demos

	Partial Public Class WorldWeather
		Inherits MapTutorialControl
		Private openWeatherMapService_Renamed As OpenWeatherMapService
		Private actualWeatherInfo As CityWeather
		Private actualMeasureUnits As TemperatureMeasureUnits = TemperatureMeasureUnits.Celsius

		Protected ReadOnly Property OpenWeatherMapService() As OpenWeatherMapService
			Get
				Return openWeatherMapService_Renamed
			End Get
		End Property
		Private ReadOnly Property TilesLayer() As ImageTilesLayer
			Get
				Return CType(mapControl1.Layers(0), ImageTilesLayer)
			End Get
		End Property
		Private ReadOnly Property ItemsLayer() As VectorItemsLayer
			Get
				Return CType(mapControl1.Layers(1), VectorItemsLayer)
			End Get
		End Property

		Public Sub New()
			InitializeComponent()

			TilesLayer.DataProvider = CreateBingDataProvider(BingMapKind.Area)
			mapControl1.SetMapItemFactory(New DemoWeatherItemFactory())

			Me.openWeatherMapService_Renamed = New OpenWeatherMapService(LoadCapitalsFromXML())
			AddHandler OpenWeatherMapService.ReadCompleted, AddressOf OpenWeatherMapService_ReadCompleted
			openWeatherMapService_Renamed.GetWeatherAsync()
		End Sub
		Private Function LoadCapitalsFromXML() As List(Of String)
			Dim capitals As New List(Of String)()
			Dim document As XDocument = DemoUtils.LoadXml("Capitals.xml")
			If document IsNot Nothing Then
				For Each element As XElement In document.Element("Capitals").Elements()
					capitals.Add(element.Value)
				Next element
			End If
			Return capitals
		End Function
		Private Sub OpenWeatherMapService_ReadCompleted(ByVal sender As Object, ByVal e As EventArgs)
			ItemsLayer.DataSource = OpenWeatherMapService.WeatherInCities
			ItemsLayer.SelectedItem = OpenWeatherMapService.LosAngelesWeather
			RemoveHandler OpenWeatherMapService.ReadCompleted, AddressOf OpenWeatherMapService_ReadCompleted
		End Sub

		Private Sub rgMode_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles rgMode.SelectedIndexChanged
			If actualWeatherInfo IsNot Nothing Then
				If rgMode.SelectedIndex = 0 Then
					actualMeasureUnits = TemperatureMeasureUnits.Fahrenheit
					Me.chartControl1.Series(0).ValueDataMembers(0) = "Weather.FahrenheitTemperature"
				End If
				If rgMode.SelectedIndex = 1 Then
					actualMeasureUnits = TemperatureMeasureUnits.Celsius
					Me.chartControl1.Series(0).ValueDataMembers(0) = "Weather.CelsiusTemperature"
				End If
				lbTemperature.Text = actualWeatherInfo.Weather.GetTemperatureString(actualMeasureUnits)
				ItemsLayer.Mappings.Text = actualWeatherInfo.GetTemperatureDataMember(actualMeasureUnits)
			End If
		End Sub

		Private Sub mapControl1_SelectionChanged(ByVal sender As Object, ByVal e As MapSelectionChangedEventArgs) Handles mapControl1.SelectionChanged
			Dim selection As IList(Of Object) = e.Selection
			If selection Is Nothing OrElse selection.Count <> 1 Then
				Return
			End If
			Dim cityWeatherInfo As CityWeather = TryCast(selection(0), CityWeather)
			Dim mapItem As MapItem = TryCast(selection(0), MapItem)
			If mapItem IsNot Nothing Then
				cityWeatherInfo = TryCast(ItemsLayer.GetItemSourceObject(mapItem), CityWeather)
			End If
			Me.actualWeatherInfo = cityWeatherInfo
			If cityWeatherInfo IsNot Nothing Then
				If cityWeatherInfo.Forecast Is Nothing Then
					OpenWeatherMapService.GetForecastForCityAsync(cityWeatherInfo)
					AddHandler cityWeatherInfo.ForecastUpdated, AddressOf cityWeatherInfo_ForecastUpdated
				Else
					cityWeatherInfo_ForecastUpdated(cityWeatherInfo, Nothing)
				End If
			End If
		End Sub
		Private Sub cityWeatherInfo_ForecastUpdated(ByVal sender As Object, ByVal e As EventArgs)
			Dim cityWeatherInfo As CityWeather = TryCast(sender, CityWeather)
			Dim del As Action(Of CityWeather) = AddressOf LoadWeatherPicture
			BeginInvoke(del, cityWeatherInfo)
		End Sub
		Private Sub LoadWeatherPicture(ByVal cityWeatherInfo As CityWeather)
			Me.chartControl1.Series(0).DataSource = cityWeatherInfo.Forecast
			lbCity.Text = cityWeatherInfo.City
			lbTemperature.Text = cityWeatherInfo.Weather.GetTemperatureString(actualMeasureUnits)
			peWeatherIcon.LoadAsync(cityWeatherInfo.WeatherIconPath)
		End Sub
		Private Sub mapControl1_SelectionChanging(ByVal sender As Object, ByVal e As MapSelectionChangingEventArgs) Handles mapControl1.SelectionChanging
			e.Cancel = e.Selection.Count = 0
		End Sub
	End Class
End Namespace