Mini Kabibi Habibi
Imports Microsoft.VisualBasic
Imports System
Imports System.ComponentModel
Imports System.Collections.Generic
Imports DevExpress.XtraScheduler
Imports System.IO
Imports DevExpress.Xpf.Scheduler
Imports System.Windows.Media.Imaging
Imports System.Collections
Imports DevExpress.Utils.Serializing
Imports System.Xml
Imports DevExpress.XtraScheduler.Native
Imports DevExpress.Utils
Imports DevExpress.Xpf.Core
Imports System.Reflection
Imports System.Windows
Imports DevExpress.XtraScheduler.Xml
Imports System.Xml.Serialization
Imports System.Data
Imports System.Drawing
Imports System.Drawing.Imaging
Namespace SchedulerDemo
Public Class CustomEvent
Private id_Renamed As Object
Private start As DateTime
Private [end] As DateTime
Private subject_Renamed As String
Private status_Renamed As Integer
Private description_Renamed As String
Private label_Renamed As Long
Private location_Renamed As String
Private allday_Renamed As Boolean
Private eventType_Renamed As Integer
Private recurrenceInfo_Renamed As String
Private reminderInfo_Renamed As String
Private ownerId_Renamed As Object
Private price_Renamed As Double
Private contactInfo_Renamed As String
Public Property StartTime() As DateTime
Get
Return start
End Get
Set(ByVal value As DateTime)
start = value
End Set
End Property
Public Property EndTime() As DateTime
Get
Return [end]
End Get
Set(ByVal value As DateTime)
[end] = value
End Set
End Property
Public Property Subject() As String
Get
Return subject_Renamed
End Get
Set(ByVal value As String)
subject_Renamed = value
End Set
End Property
Public Property Status() As Integer
Get
Return status_Renamed
End Get
Set(ByVal value As Integer)
status_Renamed = value
End Set
End Property
Public Property Description() As String
Get
Return description_Renamed
End Get
Set(ByVal value As String)
description_Renamed = value
End Set
End Property
Public Property Label() As Long
Get
Return label_Renamed
End Get
Set(ByVal value As Long)
label_Renamed = value
End Set
End Property
Public Property Location() As String
Get
Return location_Renamed
End Get
Set(ByVal value As String)
location_Renamed = value
End Set
End Property
Public Property AllDay() As Boolean
Get
Return allday_Renamed
End Get
Set(ByVal value As Boolean)
allday_Renamed = value
End Set
End Property
Public Property EventType() As Integer
Get
Return eventType_Renamed
End Get
Set(ByVal value As Integer)
eventType_Renamed = value
End Set
End Property
Public Property RecurrenceInfo() As String
Get
Return recurrenceInfo_Renamed
End Get
Set(ByVal value As String)
recurrenceInfo_Renamed = value
End Set
End Property
Public Property ReminderInfo() As String
Get
Return reminderInfo_Renamed
End Get
Set(ByVal value As String)
reminderInfo_Renamed = value
End Set
End Property
Public Property OwnerId() As Object
Get
Return ownerId_Renamed
End Get
Set(ByVal value As Object)
ownerId_Renamed = value
End Set
End Property
Public Property Id() As Object
Get
Return id_Renamed
End Get
Set(ByVal value As Object)
id_Renamed = value
End Set
End Property
Public Property Price() As Double
Get
Return price_Renamed
End Get
Set(ByVal value As Double)
price_Renamed = value
End Set
End Property
Public Property ContactInfo() As String
Get
Return contactInfo_Renamed
End Get
Set(ByVal value As String)
contactInfo_Renamed = value
End Set
End Property
End Class
Public Class CustomResource
Private id_Renamed As Object
Private caption_Renamed As String
Public Property Id() As Object
Get
Return id_Renamed
End Get
Set(ByVal value As Object)
id_Renamed = value
End Set
End Property
Public Property Caption() As String
Get
Return caption_Renamed
End Get
Set(ByVal value As String)
caption_Renamed = value
End Set
End Property
End Class
Public Class SchedulerItemList(Of T As New)
Inherits CollectionBase
Implements IBindingList
Default Public ReadOnly Property Item(ByVal idx As Integer) As T
Get
Return CType(MyBase.List(idx), T)
End Get
End Property
Public Sub Add(ByVal item As T)
MyBase.List.Add(item)
End Sub
Public Function IndexOf(ByVal item As T) As Integer
Return List.IndexOf(item)
End Function
Public Function AddNew() As Object Implements IBindingList.AddNew
Dim app As New T()
List.Add(app)
Return app
End Function
Public ReadOnly Property AllowEdit() As Boolean Implements IBindingList.AllowEdit
Get
Return True
End Get
End Property
Public ReadOnly Property AllowNew() As Boolean Implements IBindingList.AllowNew
Get
Return True
End Get
End Property
Public ReadOnly Property AllowRemove() As Boolean Implements IBindingList.AllowRemove
Get
Return True
End Get
End Property
Private Event listChangedHandler As ListChangedEventHandler
Public Custom Event ListChanged As ListChangedEventHandler Implements IBindingList.ListChanged
AddHandler(ByVal value As ListChangedEventHandler)
AddHandler listChangedHandler, value
End AddHandler
RemoveHandler(ByVal value As ListChangedEventHandler)
RemoveHandler listChangedHandler, value
End RemoveHandler
RaiseEvent(ByVal sender As System.Object, ByVal e As System.ComponentModel.ListChangedEventArgs)
End RaiseEvent
End Event
Friend Sub OnListChanged(ByVal args As ListChangedEventArgs)
RaiseEvent listChangedHandler(Me, args)
End Sub
Protected Overrides Sub OnClearComplete()
MyBase.OnClearComplete()
OnListChanged(New ListChangedEventArgs(ListChangedType.Reset, -1))
End Sub
Protected Overrides Sub OnRemoveComplete(ByVal index As Integer, ByVal value As Object)
OnListChanged(New ListChangedEventArgs(ListChangedType.ItemDeleted, index))
End Sub
Protected Overrides Sub OnInsertComplete(ByVal index As Integer, ByVal value As Object)
OnListChanged(New ListChangedEventArgs(ListChangedType.ItemAdded, index))
End Sub
Public Sub AddIndex(ByVal pd As PropertyDescriptor) Implements IBindingList.AddIndex
Throw New NotSupportedException()
End Sub
Public Sub ApplySort(ByVal pd As PropertyDescriptor, ByVal dir As ListSortDirection) Implements IBindingList.ApplySort
Throw New NotSupportedException()
End Sub
Public Function Find(ByVal [property] As PropertyDescriptor, ByVal key As Object) As Integer Implements IBindingList.Find
Throw New NotSupportedException()
End Function
Public ReadOnly Property IsSorted() As Boolean Implements IBindingList.IsSorted
Get
Return False
End Get
End Property
Public Sub RemoveIndex(ByVal pd As PropertyDescriptor) Implements IBindingList.RemoveIndex
Throw New NotSupportedException()
End Sub
Public Sub RemoveSort() Implements IBindingList.RemoveSort
Throw New NotSupportedException()
End Sub
Public ReadOnly Property SortDirection() As ListSortDirection Implements IBindingList.SortDirection
Get
Throw New NotSupportedException()
End Get
End Property
Public ReadOnly Property SortProperty() As PropertyDescriptor Implements IBindingList.SortProperty
Get
Throw New NotSupportedException()
End Get
End Property
Public ReadOnly Property SupportsChangeNotification() As Boolean Implements IBindingList.SupportsChangeNotification
Get
Return True
End Get
End Property
Public ReadOnly Property SupportsSearching() As Boolean Implements IBindingList.SupportsSearching
Get
Return False
End Get
End Property
Public ReadOnly Property SupportsSorting() As Boolean Implements IBindingList.SupportsSorting
Get
Return False
End Get
End Property
End Class
Public Class DemoUtils
Private Const ResourcePathData As String = "SchedulerDemo.Data"
Private Shared Users() As String = { "Peter Dolan", "Ryan Fischer", "Andrew Miller", "Tom Hamlett", "Jerry Campbell", "Carl Lucas", "Mark Hamilton", "Steve Lee" }
Public Shared RandomInstance As New Random()
Public Shared [Date] As New DateTime(2010, 7, 13)
Public Shared ReadOnly ResourceList As New Dictionary(Of Integer, String)()
Private Shared taskDescriptions() As String = { "Implementing Developer Express MasterView control into Accounting System.", "Web Edition: Data Entry Page. The issue with date validation.", "Payables Due Calculator. It is ready for testing.", "Web Edition: Search Page. It is ready for testing.", "Main Menu: Duplicate Items. Somebody has to review all menu items in the system.", "Receivables Calculator. Where can I found the complete specs", "Ledger: Inconsistency. Please fix it.", "Receivables Printing. It is ready for testing.", "Screen Redraw. Somebody has to look at it.", "Email System. What library we are going to use?", "Adding New Vendors Fails. This module doesn't work completely!", "History. Will we track the sales history in our system?", "Main Menu: Add a File menu. File menu is missed!!!", "Currency Mask. The current currency mask in completely inconvinience.", "Drag & Drop. In the schedule module drag & drop is not available.", "Data Import. What competitors databases will we support?", "Reports. The list of incomplete reports.", "Data Archiving. This features is still missed in our application", "Email Attachments. How to add the multiple attachment? I did not find a way to do it.", "Check Register. We are using different paths for different modules.", "Data Export. Our customers asked for export into Excel"}
Shared Sub New()
Dim count As Integer = Users.Length
For i As Integer = 0 To count - 1
ResourceList.Add(i, Users(i))
Next i
End Sub
Public Shared Function GetResourceStream(ByVal resourcePath As String, ByVal resourceName As String) As Stream
Dim fullResourceName As String = String.Format("{0}.{1}", resourcePath, resourceName)
Dim result As Stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(fullResourceName)
If result IsNot Nothing Then
Return result
End If
Return System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)
End Function
Public Shared Function ConvertBitmapToBitmapImage(ByVal source As Image) As BitmapImage
Dim stream As New MemoryStream()
source.Save(stream, ImageFormat.Png)
stream.Position = 0
Dim result As New BitmapImage()
result.BeginInit()
result.StreamSource = stream
result.EndInit()
Return result
End Function
Public Shared Function ConvertImageToMemoryStream(ByVal img As Image) As MemoryStream
Dim ms = New MemoryStream()
img.Save(ms, ImageFormat.Png)
Return ms
End Function
Public Shared Sub FillResources(ByVal storage As SchedulerStorage, ByVal maxCount As Integer)
Dim resources As ResourceStorage = storage.ResourceStorage
storage.BeginUpdate()
Try
resources.Clear()
Dim count As Integer = Math.Min(maxCount, ResourceList.Count)
For i As Integer = 0 To count - 1
Dim caption As String = String.Empty
If ResourceList.TryGetValue(i, caption) Then
If String.IsNullOrEmpty(caption) Then
Continue For
End If
Dim resource As Resource = storage.CreateResource(i)
resource.Caption = caption
resources.Add(resource)
End If
Next i
Finally
storage.EndUpdate()
End Try
End Sub
Private Shared outlookCalendarPaths_Renamed() As String = Nothing
Public Shared Function GetSportEventsData() As DataTable
Dim sportEventDS As New DataSet()
Using stream As Stream = GetResourceStream(ResourcePathData, "sportevents.xml")
sportEventDS.ReadXml(stream)
stream.Close()
End Using
Return sportEventDS.Tables(0)
End Function
Public Shared Function GenerateScheduleTasks() As DataTable
Dim tbl As New DataTable()
tbl = New DataTable("ScheduleTasks")
tbl.Columns.Add("ID", GetType(Integer))
tbl.Columns.Add("Subject", GetType(String))
tbl.Columns.Add("Severity", GetType(Integer))
tbl.Columns.Add("Priority", GetType(Integer))
tbl.Columns.Add("Duration", GetType(Integer))
tbl.Columns.Add("Description", GetType(String))
For i As Integer = 0 To 20
Dim description As String = taskDescriptions(i)
Dim index As Integer = description.IndexOf("."c)
Dim subject As String
If index <= 0 Then
subject = "task" & Convert.ToInt32(i + 1)
Else
subject = description.Substring(0, index)
End If
tbl.Rows.Add(New Object() { i + 1, subject, RandomInstance.Next(3), RandomInstance.Next(3), Math.Max(1, RandomInstance.Next(8)), description })
Next i
Return tbl
End Function
Public Shared ReadOnly Property OutlookCalendarPaths() As String()
Get
If outlookCalendarPaths_Renamed IsNot Nothing Then
Return outlookCalendarPaths_Renamed
End If
Try
outlookCalendarPaths_Renamed = DevExpress.XtraScheduler.Outlook.OutlookExchangeHelper.GetOutlookCalendarPaths()
Catch
ReportOutlookWarning("get the list of available calendars from Microsoft Outlook")
outlookCalendarPaths_Renamed = New String(){}
End Try
Return outlookCalendarPaths_Renamed
End Get
End Property
Public Shared Sub ReportOutlookWarning(ByVal message As String)
DXMessageBox.Show(String.Format("Unable to {0}." & Constants.vbLf & "Check whether MS Outlook is installed.", message), "Import from MS Outlook", MessageBoxButton.OK, MessageBoxImage.Warning)
End Sub
Public Shared Sub ReportOutlookError(ByVal message As String)
DXMessageBox.Show(String.Format("Impossible to {0}. Probably, Microsoft Outlook isn't installed on this machine.", message), System.Reflection.Assembly.GetEntryAssembly().FullName, MessageBoxButton.OK, MessageBoxImage.Error)
End Sub
Public Shared Sub ReportOutlookError(ByVal message As String, ByVal exceptionMessage As String)
DXMessageBox.Show(String.Format("Failed to {0}. An exception has occured:" & Constants.vbCrLf & "{1}", message, exceptionMessage), System.Reflection.Assembly.GetEntryAssembly().FullName, MessageBoxButton.OK, MessageBoxImage.Error)
End Sub
End Class
End Namespace
Namespace SchedulerDemo.Internal
Public MustInherit Class SchedulerDemoXmlPersistenceHelper(Of T As New)
Inherits CollectionXmlPersistenceHelper
Public Sub New()
MyBase.New(Nothing)
End Sub
Public Sub New(ByVal eventList As SchedulerItemList(Of T))
MyBase.New(eventList)
End Sub
Protected Overrides ReadOnly Property XmlCollectionName() As String
Get
Return AppointmentSR.XmlCollectionName
End Get
End Property
Private ReadOnly Property Items() As SchedulerItemList(Of T)
Get
Return CType(Collection, SchedulerItemList(Of T))
End Get
End Property
Protected Overrides Function CreateXmlContextItem(ByVal obj As Object) As IXmlContextItem
Return Nothing
End Function
End Class
Public Class EventItemXmlPersistenceHelper
Inherits SchedulerDemoXmlPersistenceHelper(Of EventItem)
Protected Overrides Function CreateObjectCollectionXmlLoader(ByVal root As XmlNode) As ObjectCollectionXmlLoader
Return New EventItemListXmlLoader(root)
End Function
End Class
Public Class CarItemXmlPersistenceHelper
Inherits SchedulerDemoXmlPersistenceHelper(Of CarItem)
Protected Overrides Function CreateObjectCollectionXmlLoader(ByVal root As XmlNode) As ObjectCollectionXmlLoader
Return New CarItemListXmlLoader(root)
End Function
End Class
Public MustInherit Class SchedulerDemoCollectionXmlLoader(Of T As New)
Inherits ObjectCollectionXmlLoader
Private items_Renamed As New SchedulerItemList(Of T)()
Protected Sub New(ByVal root As XmlNode)
MyBase.New(root)
End Sub
Protected Overrides ReadOnly Property Collection() As ICollection
Get
Return items_Renamed
End Get
End Property
Protected Overrides ReadOnly Property XmlCollectionName() As String
Get
Return AppointmentSR.XmlCollectionName
End Get
End Property
Public ReadOnly Property Items() As SchedulerItemList(Of T)
Get
Return items_Renamed
End Get
End Property
Protected Overrides Sub AddObjectToCollection(ByVal obj As Object)
Items.Add(CType(obj, T))
End Sub
Protected Overrides Sub ClearCollectionObjects()
Items.Clear()
End Sub
Protected Overridable Function CreateItemLoader(ByVal root As XmlNode) As ObjectXmlLoader
Return New EventItemXmlLoader(root)
End Function
Protected Overrides Function LoadObject(ByVal root As XmlNode) As Object
Dim loader As ObjectXmlLoader = CreateItemLoader(root)
Return loader.ObjectFromXml()
End Function
End Class
Public Class EventItemListXmlLoader
Inherits SchedulerDemoCollectionXmlLoader(Of EventItem)
Public Sub New(ByVal root As XmlNode)
MyBase.New(root)
End Sub
Protected Overrides Function CreateItemLoader(ByVal root As XmlNode) As ObjectXmlLoader
Return New EventItemXmlLoader(root)
End Function
End Class
Public Class CarItemListXmlLoader
Inherits SchedulerDemoCollectionXmlLoader(Of CarItem)
Public Sub New(ByVal root As XmlNode)
MyBase.New(root)
End Sub
Protected Overrides Function CreateItemLoader(ByVal root As XmlNode) As ObjectXmlLoader
Return New CarItemXmlLoader(root)
End Function
End Class
Public Class EventItemXmlLoader
Inherits ObjectXmlLoader
Private root_Renamed As XmlNode
Public Sub New(ByVal root As XmlNode)
MyBase.New(root)
Me.root_Renamed = root
End Sub
Public ReadOnly Property Root() As XmlNode
Get
Return root_Renamed
End Get
End Property
Public Overrides Function ObjectFromXml() As Object
Dim ev As New EventItem()
ev.Type = ReadAttributeAsInt("Type", 0)
ev.StartTime = ReadAttributeAsDateTime("Start", DateTime.MinValue)
ev.EndTime = ReadAttributeAsDateTime("End", DateTime.MinValue)
ev.Label = ReadAttributeAsInt("Label", 0)
ev.Description = ReadAttributeAsString("Description", String.Empty)
ev.Location = ReadAttributeAsString("Location", String.Empty)
ev.ResourceId = ReadAttributeAsString("ResourceId", String.Empty)
ev.Status = ReadAttributeAsInt("Status", 0)
ev.Subject = ReadAttributeAsString("Subject", String.Empty)
ev.Price = ReadAttributeAsInt("Price", 0)
ev.RecurrenceInfo = ReadChildNodesAsString("RecurrenceInfo", String.Empty)
ev.ReminderInfo = ReadChildNodesAsString("Reminder", String.Empty)
Return ev
End Function
Private Function ReadChildNodesAsString(ByVal name As String, ByVal defaultValue As String) As String
Dim obj As String = defaultValue
For Each node As XmlNode In Root.ChildNodes
If node.Name = name Then
obj = node.OuterXml
End If
Next node
Return obj
End Function
End Class
Public Class CarItemXmlLoader
Inherits ObjectXmlLoader
Public Sub New(ByVal root As XmlNode)
MyBase.New(root)
End Sub
Public Overrides Function ObjectFromXml() As Object
Dim car As New CarItem()
car.Caption = ReadAttributeAsString("Caption", String.Empty)
car.Id = ReadAttributeAsString("Id", String.Empty)
car.Picture = CType(ReadAttributeValue("Picture", GetType(Byte())), Byte())
Return car
End Function
End Class
#Region "EventItem"
Public Class EventItem
Private privateType As Object
Public Property Type() As Object
Get
Return privateType
End Get
Set(ByVal value As Object)
privateType = value
End Set
End Property
Private privateStartTime As Object
Public Property StartTime() As Object
Get
Return privateStartTime
End Get
Set(ByVal value As Object)
privateStartTime = value
End Set
End Property
Private privateEndTime As Object
Public Property EndTime() As Object
Get
Return privateEndTime
End Get
Set(ByVal value As Object)
privateEndTime = value
End Set
End Property
Private privateDescription As String
Public Property Description() As String
Get
Return privateDescription
End Get
Set(ByVal value As String)
privateDescription = value
End Set
End Property
Private privateAllDay As Boolean
Public Property AllDay() As Boolean
Get
Return privateAllDay
End Get
Set(ByVal value As Boolean)
privateAllDay = value
End Set
End Property
Private privateLabel As Integer
Public Property Label() As Integer
Get
Return privateLabel
End Get
Set(ByVal value As Integer)
privateLabel = value
End Set
End Property
Private privateLocation As String
Public Property Location() As String
Get
Return privateLocation
End Get
Set(ByVal value As String)
privateLocation = value
End Set
End Property
Private privateResourceId As Object
Public Property ResourceId() As Object
Get
Return privateResourceId
End Get
Set(ByVal value As Object)
privateResourceId = value
End Set
End Property
Private privateStatus As Integer
Public Property Status() As Integer
Get
Return privateStatus
End Get
Set(ByVal value As Integer)
privateStatus = value
End Set
End Property
Private privateSubject As String
Public Property Subject() As String
Get
Return privateSubject
End Get
Set(ByVal value As String)
privateSubject = value
End Set
End Property
Private privatePrice As Object
Public Property Price() As Object
Get
Return privatePrice
End Get
Set(ByVal value As Object)
privatePrice = value
End Set
End Property
Private privateRecurrenceInfo As String
Public Property RecurrenceInfo() As String
Get
Return privateRecurrenceInfo
End Get
Set(ByVal value As String)
privateRecurrenceInfo = value
End Set
End Property
Private privateReminderInfo As String
Public Property ReminderInfo() As String
Get
Return privateReminderInfo
End Get
Set(ByVal value As String)
privateReminderInfo = value
End Set
End Property
Public Sub New()
Type = CInt(Fix(AppointmentType.Normal))
StartTime = DateTime.MinValue
EndTime = DateTime.MinValue + DateTimeHelper.HalfHourSpan
Description = String.Empty
AllDay = False
Label = 0
Location = String.Empty
ResourceId = Resource.Empty.Id
Status = CInt(Fix(AppointmentStatusType.Free))
Subject = String.Empty
Price = 0.0
RecurrenceInfo = String.Empty
ReminderInfo = String.Empty
End Sub
End Class
#End Region
#Region "CarItem"
Public Class CarItem
Private privateCaption As String
Public Property Caption() As String
Get
Return privateCaption
End Get
Set(ByVal value As String)
privateCaption = value
End Set
End Property
Private privateId As Object
Public Property Id() As Object
Get
Return privateId
End Get
Set(ByVal value As Object)
privateId = value
End Set
End Property
Private privatePicture As Byte()
Public Property Picture() As Byte()
Get
Return privatePicture
End Get
Set(ByVal value As Byte())
privatePicture = value
End Set
End Property
Public Sub New()
Caption = String.Empty
Id = Nothing
Picture = Nothing
End Sub
End Class
#End Region
#Region "SportItem"
Public Class SportItem
Private privateStartTime As Object
Public Property StartTime() As Object
Get
Return privateStartTime
End Get
Set(ByVal value As Object)
privateStartTime = value
End Set
End Property
Private privateEndTime As Object
Public Property EndTime() As Object
Get
Return privateEndTime
End Get
Set(ByVal value As Object)
privateEndTime = value
End Set
End Property
Private privateCaption As String
Public Property Caption() As String
Get
Return privateCaption
End Get
Set(ByVal value As String)
privateCaption = value
End Set
End Property
Private privateAllDay As Boolean
Public Property AllDay() As Boolean
Get
Return privateAllDay
End Get
Set(ByVal value As Boolean)
privateAllDay = value
End Set
End Property
Private privateResourceId As Object
Public Property ResourceId() As Object
Get
Return privateResourceId
End Get
Set(ByVal value As Object)
privateResourceId = value
End Set
End Property
Private privateSportId As Integer
Public Property SportId() As Integer
Get
Return privateSportId
End Get
Set(ByVal value As Integer)
privateSportId = value
End Set
End Property
Public Sub New()
StartTime = DateTime.MinValue
EndTime = DateTime.MinValue + DateTimeHelper.HalfHourSpan
Caption = String.Empty
AllDay = False
ResourceId = Resource.Empty.Id
SportId = 0
End Sub
End Class
#End Region
#Region "SchedulerBindingList<T>"
Public Class SchedulerBindingList(Of T As New)
Inherits CollectionBase
Implements IBindingList
Default Public ReadOnly Property Item(ByVal idx As Integer) As T
Get
Return CType(MyBase.List(idx), T)
End Get
End Property
Public Sub Add(ByVal appointment As T)
MyBase.List.Add(appointment)
End Sub
Public Overridable Function AddNew() As Object Implements IBindingList.AddNew
Dim newItem As New T()
List.Add(newItem)
Return newItem
End Function
Public ReadOnly Property AllowEdit() As Boolean Implements IBindingList.AllowEdit
Get
Return True
End Get
End Property
Public ReadOnly Property AllowNew() As Boolean Implements IBindingList.AllowNew
Get
Return True
End Get
End Property
Public ReadOnly Property AllowRemove() As Boolean Implements IBindingList.AllowRemove
Get
Return True
End Get
End Property
Private Event listChangedHandler As ListChangedEventHandler
Public Custom Event ListChanged As ListChangedEventHandler Implements IBindingList.ListChanged
AddHandler(ByVal value As ListChangedEventHandler)
AddHandler listChangedHandler, value
End AddHandler
RemoveHandler(ByVal value As ListChangedEventHandler)
RemoveHandler listChangedHandler, value
End RemoveHandler
RaiseEvent(ByVal sender As System.Object, ByVal e As System.ComponentModel.ListChangedEventArgs)
End RaiseEvent
End Event
Public Sub AddIndex(ByVal pd As PropertyDescriptor) Implements IBindingList.AddIndex
Throw New NotSupportedException()
End Sub
Public Sub ApplySort(ByVal pd As PropertyDescriptor, ByVal dir As ListSortDirection) Implements IBindingList.ApplySort
Throw New NotSupportedException()
End Sub
Public Function Find(ByVal [property] As PropertyDescriptor, ByVal key As Object) As Integer Implements IBindingList.Find
Throw New NotSupportedException()
End Function
Public ReadOnly Property IsSorted() As Boolean Implements IBindingList.IsSorted
Get
Return False
End Get
End Property
Public Sub RemoveIndex(ByVal pd As PropertyDescriptor) Implements IBindingList.RemoveIndex
Throw New NotSupportedException()
End Sub
Public Sub RemoveSort() Implements IBindingList.RemoveSort
Throw New NotSupportedException()
End Sub
Public ReadOnly Property SortDirection() As ListSortDirection Implements IBindingList.SortDirection
Get
Throw New NotSupportedException()
End Get
End Property
Public ReadOnly Property SortProperty() As PropertyDescriptor Implements IBindingList.SortProperty
Get
Throw New NotSupportedException()
End Get
End Property
Public ReadOnly Property SupportsChangeNotification() As Boolean Implements IBindingList.SupportsChangeNotification
Get
Return True
End Get
End Property
Public ReadOnly Property SupportsSearching() As Boolean Implements IBindingList.SupportsSearching
Get
Return False
End Get
End Property
Public ReadOnly Property SupportsSorting() As Boolean Implements IBindingList.SupportsSorting
Get
Return False
End Get
End Property
End Class
#End Region
#Region "XmlHelper"
Public NotInheritable Class SchedulerXmlHelper
Private Delegate Function MapperHandler(Of T, U)(ByVal u As U) As T
Private Const ResourcePathData As String = "SchedulerDemo.Data"
Private Sub New()
End Sub
Public Shared Sub WriteEventsToXml(ByVal collectoin As AppointmentCollection)
WriteToXmlCore(Of EventItem, Appointment)(collectoin, SchedulerDataHelper.EventsXmlSource, New MapperHandler(Of EventItem, Appointment)(AddressOf CreateEventItemFromAppointment))
End Sub
Public Shared Sub WriteSportEventsToXml(ByVal collectoin As AppointmentCollection)
WriteToXmlCore(Of SportItem, Appointment)(collectoin, "sportevents.xml", New MapperHandler(Of SportItem, Appointment)(AddressOf CreateSportItemFromAppointment))
End Sub
Public Shared Sub WriteCarsToXml(ByVal collection As ResourceCollection)
WriteToXmlCore(Of CarItem, Resource)(collection, SchedulerDataHelper.CarsXmlSource, New MapperHandler(Of CarItem, Resource)(AddressOf MapResourceToCarItem))
End Sub
Public Shared Function GetDataStream(ByVal fileName As String) As Stream
Return DemoUtils.GetResourceStream(ResourcePathData, fileName)
End Function
Public Shared Function LoadFromXml(Of T As New)(ByVal fileName As String) As SchedulerBindingList(Of T)
Dim eventList As New SchedulerBindingList(Of T)()
Using stream As Stream = GetDataStream(fileName)
Dim s As New XmlSerializer(GetType(SchedulerBindingList(Of T)))
eventList = CType(s.Deserialize(stream), SchedulerBindingList(Of T))
stream.Close()
End Using
Return eventList
End Function
Private Shared Function CreateEventItemFromAppointment(ByVal appointment As Appointment) As EventItem
Dim item As New EventItem()
If appointment.Reminder IsNot Nothing Then
item.ReminderInfo = CreateReminderString(appointment)
End If
item.Description = appointment.Description
item.AllDay = appointment.AllDay
item.EndTime = appointment.End
item.Label = appointment.LabelId
item.Location = appointment.Location
If appointment.RecurrenceInfo IsNot Nothing Then
item.RecurrenceInfo = appointment.RecurrenceInfo.ToXml()
End If
item.ResourceId = appointment.ResourceId
item.StartTime = appointment.Start
item.Status = appointment.StatusId
item.Subject = appointment.Subject
item.Type = appointment.Type
Return item
End Function
Private Shared Function CreateSportItemFromAppointment(ByVal appointment As Appointment) As SportItem
Dim item As New SportItem()
item.Caption = appointment.Subject
item.AllDay = appointment.AllDay
item.EndTime = appointment.End
item.ResourceId = appointment.ResourceId
item.SportId = appointment.LabelId
item.StartTime = appointment.Start
Return item
End Function
Private Shared Function CreateReminderString(ByVal appointment As Appointment) As String
Dim helper As New ReminderXmlPersistenceHelper(appointment.Reminder, DateSavingType.LocalTime)
Return helper.ToXml()
End Function
Private Shared Function MapResourceToCarItem(ByVal resource As Resource) As CarItem
Dim item As New CarItem()
item.Caption = resource.Caption
item.Id = resource.Id
Return item
End Function
Private Shared Sub WriteToXmlCore(Of T, U)(ByVal sourceCollection As NotificationCollection(Of U), ByVal fileName As String, ByVal map As MapperHandler(Of T, U))
Using stream As New FileStream(fileName, FileMode.Open, FileAccess.Write)
Dim result As New NotificationCollection(Of T)()
For Each item As U In sourceCollection
result.Add(map(item))
Next item
Dim s As New XmlSerializer(GetType(NotificationCollection(Of T)))
s.Serialize(stream, result)
stream.Close()
End Using
End Sub
End Class
#End Region
End Namespace