Mini Kabibi Habibi
Imports Microsoft.VisualBasic
Imports System
Imports System.Linq
Imports System.Collections.Generic
Imports System.Web.UI.WebControls
Imports DevExpress.Web.ASPxEditors
Imports DevExpress.Web.ASPxSplitter
Imports DevExpress.XtraScheduler
Imports DevExpress.XtraScheduler.iCalendar
Imports DevExpress.Web.ASPxNavBar
Imports System.Collections
Partial Public Class Calendar
Inherits System.Web.UI.Page
Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As EventArgs)
Utils.ApplyTheme(Me)
End Sub
Protected Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs)
CType(New SchedulerRowInsertionHelper(), SchedulerRowInsertionHelper).ProvideRowInsertion(Scheduler, AppointmentDataSource)
ResourceNavBar.DataBind()
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
PrepareMasterSplitter()
If (Not SchedulerData.GetAppointments().Any()) Then
ImportCalendarData()
End If
End Sub
Protected Sub Scheduler_FilterAppointment(ByVal sender As Object, ByVal e As PersistentObjectCancelEventArgs)
If _selectedResourceNameCache Is Nothing Then
_selectedResourceNameCache = FindSelectedResourceNames()
End If
Dim resourceId As Integer
Dim appointment = CType(e.Object, Appointment)
If Integer.TryParse(appointment.ResourceId.ToString(), resourceId) Then
Dim resource = SchedulerData.GetResources().First(Function(r) r.ID = resourceId)
e.Cancel = Not _selectedResourceNameCache.Contains(resource.Name)
End If
End Sub
Protected Function GetResourceCheckedState(ByVal container As NavBarItemTemplateContainer) As Boolean
Return container.Item.Group.VisibleIndex = 0 AndAlso container.Item.VisibleIndex = 0
End Function
Private Sub PrepareMasterSplitter()
Dim rootHolder = Page.Master.Master.FindControl("RootHolder")
Dim splitter = (CType(rootHolder.FindControl("LayoutSplitter"), ASPxSplitter))
splitter.GetPaneByName("LeftPane").Size = GetNavigationAreaSize()
Dim pane = splitter.GetPaneByName("MainPane")
pane.PaneStyle.BorderLeft.BorderWidth = 1
pane.ScrollBars = ScrollBars.Auto
End Sub
Private Function GetNavigationAreaSize() As Integer
Dim theme = Utils.CurrentTheme
If theme Is "Metropolis" OrElse theme Is "MetropolisBlue" Then
Return 345
End If
Return 300
End Function
Private Sub ImportCalendarData()
Scheduler.DataBind()
CType(New iCalendarImporter(Scheduler.Storage), iCalendarImporter).Import(Server.MapPath("~/App_Data/CalendarData.ics"))
End Sub
Private _selectedResourceNameCache As ISet(Of String)
Private Function FindSelectedResourceNames() As ISet(Of String)
Dim result = New HashSet(Of String)()
For i As Integer = 0 To ResourceNavBar.Items.Count - 1
Dim checkbox = TryCast(ResourceNavBar.Items(i).FindControl("CheckBox"), ASPxCheckBox)
If checkbox IsNot Nothing AndAlso checkbox.Checked Then
result.Add(checkbox.Text)
End If
Next i
Return result
End Function
End Class