Mini Kabibi Habibi
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections
Imports System.Collections.Generic
Imports DevExpress.Data
Imports DevExpress.Utils
Imports DevExpress.XtraTreeList
Namespace DevExpress.Docs.Demos
Public Class TreeListRootNode
Implements TreeList.IVirtualTreeListData
Private privateData As List(Of SpreadsheetExampleGroup)
Public Property Data() As List(Of SpreadsheetExampleGroup)
Get
Return privateData
End Get
Set(ByVal value As List(Of SpreadsheetExampleGroup))
privateData = value
End Set
End Property
Private Sub VirtualTreeGetCellValue(ByVal info As VirtualTreeGetCellValueInfo) Implements TreeList.IVirtualTreeListData.VirtualTreeGetCellValue
info.CellData = " root"
End Sub
Private Sub VirtualTreeGetChildNodes(ByVal info As VirtualTreeGetChildNodesInfo) Implements TreeList.IVirtualTreeListData.VirtualTreeGetChildNodes
info.Children = Data
End Sub
Private Sub VirtualTreeSetCellValue(ByVal info As VirtualTreeSetCellValueInfo) Implements TreeList.IVirtualTreeListData.VirtualTreeSetCellValue
End Sub
End Class
Public Class SpreadsheetExampleGroup
Implements TreeList.IVirtualTreeListData
Private name_Renamed As String
Private innerList As List(Of SpreadsheetExample)
Public Sub New(ByVal name As String, ByVal examples As List(Of SpreadsheetExample))
Guard.ArgumentNotNull(name, "name")
Guard.ArgumentNotNull(examples, "examples")
Me.name_Renamed = name
Me.innerList = examples
End Sub
Public ReadOnly Property Name() As String
Get
Return name_Renamed
End Get
End Property
Public ReadOnly Property Examples() As List(Of SpreadsheetExample)
Get
Return innerList
End Get
End Property
Private Sub VirtualTreeGetCellValue(ByVal info As VirtualTreeGetCellValueInfo) Implements TreeList.IVirtualTreeListData.VirtualTreeGetCellValue
info.CellData = Name
End Sub
Private Sub VirtualTreeGetChildNodes(ByVal info As VirtualTreeGetChildNodesInfo) Implements TreeList.IVirtualTreeListData.VirtualTreeGetChildNodes
info.Children = innerList
End Sub
Private Sub VirtualTreeSetCellValue(ByVal info As VirtualTreeSetCellValueInfo) Implements TreeList.IVirtualTreeListData.VirtualTreeSetCellValue
End Sub
End Class
Public Class SpreadsheetExample
Implements TreeList.IVirtualTreeListData
Private privateCode As String
Public Property Code() As String
Get
Return privateCode
End Get
Set(ByVal value As String)
privateCode = value
End Set
End Property
Private privateRegionName As String
Public Property RegionName() As String
Get
Return privateRegionName
End Get
Set(ByVal value As String)
privateRegionName = value
End Set
End Property
Private privateGroup As String
Public Property Group() As String
Get
Return privateGroup
End Get
Set(ByVal value As String)
privateGroup = value
End Set
End Property
Private Sub VirtualTreeGetCellValue(ByVal info As VirtualTreeGetCellValueInfo) Implements TreeList.IVirtualTreeListData.VirtualTreeGetCellValue
info.CellData = RegionName
End Sub
Private Sub VirtualTreeGetChildNodes(ByVal info As VirtualTreeGetChildNodesInfo) Implements TreeList.IVirtualTreeListData.VirtualTreeGetChildNodes
End Sub
Private Sub VirtualTreeSetCellValue(ByVal info As VirtualTreeSetCellValueInfo) Implements TreeList.IVirtualTreeListData.VirtualTreeSetCellValue
End Sub
End Class
#Region "Directories"
Public Class Directories
Inherits ArrayList
Implements DevExpress.Data.IRelationList
Public Sub New(ByVal root As String)
Dim s() As String = System.IO.Directory.GetDirectories(root)
For i As Integer = 0 To s.Length - 1
Add(New DirectoryItem(i, s(i)))
Next i
End Sub
Default Public Overridable Shadows ReadOnly Property Item(ByVal index As Integer) As DirectoryItem
Get
Return CType(MyBase.Item(index), DirectoryItem)
End Get
End Property
#Region "IRelationList"
Private Function GetRelationName(ByVal index As Integer, ByVal relationIndex As Integer) As String Implements IRelationList.GetRelationName
Return (If(relationIndex = 0, "Directory", "File"))
End Function
Private ReadOnly Property RelationCount() As Integer Implements IRelationList.RelationCount
Get
Return 2
End Get
End Property
Private Function IsMasterRowEmpty(ByVal index As Integer, ByVal relationIndex As Integer) As Boolean Implements IRelationList.IsMasterRowEmpty
Return Me(index).MasterDetail(relationIndex)
End Function
Private Function GetDetailList(ByVal index As Integer, ByVal relationIndex As Integer) As IList Implements IRelationList.GetDetailList
Dim list As IList
Dim rootDir As String = (CType(Me(index), DirectoryItem)).FullName
If relationIndex = 0 Then
list = New Directories(rootDir)
Else
list = New Files(rootDir)
End If
Return (If(list.Count > 0, list, Nothing))
End Function
#End Region
End Class
Public Class Files
Inherits ArrayList
Public Sub New(ByVal dir As String)
Dim s() As String = System.IO.Directory.GetFiles(dir)
For i As Integer = 0 To s.Length - 1
Add(New FileItem(s(i)))
Next i
End Sub
End Class
Public Class DirectoryItem
Private fid As Integer
Private fname As String
Private ffilesCount As Integer = -1
Private fchildDirCount As Integer = -1
Friend dInfo As System.IO.DirectoryInfo
Friend Sub New(ByVal fid As Integer, ByVal fname As String)
Me.fid = fid
Me.fname = fname
dInfo = New System.IO.DirectoryInfo(Me.fname)
End Sub
Public Function MasterDetail(ByVal relationIndex As Integer) As Boolean
Dim ret As Boolean = True
Try
If relationIndex = 0 Then
ret = Not(System.IO.Directory.GetDirectories(fname).Length > 0)
Else
ret = Not(System.IO.Directory.GetFiles(fname).Length > 0)
End If
Catch
End Try
Return ret
End Function
Private ReadOnly Property ID() As Integer
Get
Return fid
End Get
End Property
Public ReadOnly Property FullName() As String
Get
Return fname
End Get
End Property
Public ReadOnly Property Name() As String
Get
Return dInfo.Name
End Get
End Property
Public ReadOnly Property CreationTime() As DateTime
Get
Return dInfo.CreationTime
End Get
End Property
Public ReadOnly Property FilesCount() As Integer
Get
If ffilesCount = -1 Then
ffilesCount = 0
Try
ffilesCount = System.IO.Directory.GetFiles(fname).Length
Catch
End Try
End If
Return ffilesCount
End Get
End Property
Public ReadOnly Property ChildDirCount() As Integer
Get
If fchildDirCount = -1 Then
fchildDirCount = 0
Try
fchildDirCount = System.IO.Directory.GetDirectories(fname).Length
Catch
End Try
End If
Return fchildDirCount
End Get
End Property
Public ReadOnly Property Attributes() As String
Get
Return MyFileAttributes.StringFileAttributes(dInfo.Attributes)
End Get
End Property
End Class
Public Class FileItem
Friend fInfo As System.IO.FileInfo
Friend Sub New(ByVal fname As String)
fInfo = New System.IO.FileInfo(fname)
End Sub
Public ReadOnly Property Name() As String
Get
Return fInfo.Name
End Get
End Property
Public ReadOnly Property Length() As Long
Get
Return fInfo.Length
End Get
End Property
Public ReadOnly Property CreationTime() As DateTime
Get
Return fInfo.CreationTime
End Get
End Property
Public ReadOnly Property LastWriteTime() As DateTime
Get
Return fInfo.LastWriteTime
End Get
End Property
Public ReadOnly Property LastAccessTime() As DateTime
Get
Return fInfo.LastAccessTime
End Get
End Property
Public ReadOnly Property Attributes() As String
Get
Return MyFileAttributes.StringFileAttributes(fInfo.Attributes)
End Get
End Property
End Class
Friend Class MyFileAttributes
Friend Shared Function StringFileAttributes(ByVal fa As System.IO.FileAttributes) As String
Dim s As String = ""
If (System.IO.FileAttributes.Archive And fa) <> 0 Then
s &= "-A"
End If
If (System.IO.FileAttributes.Compressed And fa) <> 0 Then
s &= "-C"
End If
If (System.IO.FileAttributes.Normal And fa) <> 0 Then
s &= "-N"
End If
If (System.IO.FileAttributes.Hidden And fa) <> 0 Then
s &= "-H"
End If
If (System.IO.FileAttributes.ReadOnly And fa) <> 0 Then
s &= "-RO"
End If
If (System.IO.FileAttributes.System And fa) <> 0 Then
s &= "-S"
End If
If (System.IO.FileAttributes.Temporary And fa) <> 0 Then
s &= "-Tmp"
End If
s &= "-"
Return s
End Function
End Class
#End Region
#Region "GridFolder"
Public Enum FileCollectionItemType
Up = 0
File
Directory
End Enum
Friend Class FileCollection
Inherits ArrayList
Private ffilePath As String
Public Sub New(ByVal ffilePath As String)
FilePath = ffilePath
End Sub
Public Property FilePath() As String
Get
Return ffilePath
End Get
Set(ByVal value As String)
If FilePath = value Then
Return
End If
Clear()
Me.ffilePath = value
If System.IO.Path.GetFileName(value) <> String.Empty Then
Add(New FileCollectionItem(FileCollectionItemType.Up, value))
End If
Try
Dim dirs() As String = System.IO.Directory.GetDirectories(ffilePath)
For i As Integer = 0 To dirs.Length - 1
Add(New FileCollectionItem(FileCollectionItemType.Directory, dirs(i)))
Next i
Dim files() As String = System.IO.Directory.GetFiles(ffilePath)
For i As Integer = 0 To files.Length - 1
Add(New FileCollectionItem(FileCollectionItemType.File, files(i)))
Next i
Catch
End Try
End Set
End Property
Default Public Shadows ReadOnly Property Item(ByVal index As Integer) As FileCollectionItem
Get
Return TryCast(MyBase.Item(index), FileCollectionItem)
End Get
End Property
Public Overloads Function IndexOf(ByVal path As String) As Integer
For i As Integer = 0 To Count - 1
If path.Equals(Me(i).FullName) Then
Return i
End If
Next i
Return -1
End Function
End Class
Public Class FileCollectionItem
Private fitemType As FileCollectionItemType
Private fname, fdisplayName As String
Private ffileSize As Long
Private fmodified As DateTime
Public Sub New(ByVal fitemType As FileCollectionItemType, ByVal fname As String)
Me.fitemType = fitemType
Me.fname = fname
Me.fdisplayName = If(ItemType <> FileCollectionItemType.Up, System.IO.Path.GetFileName(fname), "..")
Me.ffileSize = -1
End Sub
Public ReadOnly Property ItemType() As FileCollectionItemType
Get
Return Me.fitemType
End Get
End Property
Public ReadOnly Property Name() As String
Get
Return Me.fdisplayName
End Get
End Property
Public ReadOnly Property FullName() As String
Get
Return If(ItemType = FileCollectionItemType.Up, System.IO.Path.GetDirectoryName(Me.fname), Me.fname)
End Get
End Property
Public ReadOnly Property DirectoryName() As String
Get
Return If(ItemType <> FileCollectionItemType.Up, System.IO.Path.GetDirectoryName(Me.fname), Me.fname)
End Get
End Property
Public ReadOnly Property ImageIndex() As Integer
Get
Return CInt(Fix(ItemType)) - 1
End Get
End Property
Public ReadOnly Property Size() As Long
Get
If ItemType = FileCollectionItemType.File Then
UpdateFileInfo()
Return Me.ffileSize
Else
Return 0
End If
End Get
End Property
Public ReadOnly Property Modified() As DateTime
Get
If ItemType = FileCollectionItemType.File Then
UpdateFileInfo()
Return Me.fmodified
Else
UpdateDirInfo()
Return Me.fmodified
End If
End Get
End Property
Private Sub UpdateFileInfo()
If Me.ffileSize >= 0 Then
Return
End If
Dim fileInfo As New System.IO.FileInfo(Me.fname)
Me.ffileSize = fileInfo.Length
Me.fmodified = fileInfo.LastWriteTime
End Sub
Private Sub UpdateDirInfo()
Dim dirInfo As New System.IO.DirectoryInfo(Me.fname)
Me.fmodified = dirInfo.LastWriteTime
End Sub
End Class
#End Region
End Namespace