Mini Kabibi Habibi
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