home *** CD-ROM | disk | FTP | other *** search
/ CD Actual Thematic 25: Programming / pc_actual_25.iso / Basic / GridOne / setup.EXE / CSPECIALFOLDERS.CLS < prev    next >
Encoding:
Visual Basic class definition  |  2001-09-09  |  16.9 KB  |  612 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "CSpecialFolders"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Attribute VB_Ext_KEY = "SavedWithClassBuilder6" ,"Yes"
  15. Attribute VB_Ext_KEY = "Top_Level" ,"Yes"
  16. '-----------------------------------------------------------------------------
  17. ' This is a part of the BeeGrid ActiveX control.
  18. ' Copyright ⌐ 2000 Stinga
  19. ' All rights reserved.
  20. '
  21. ' You have a right to use and distribute the BeeGrid sample files in original
  22. ' form or modified, provided that you agree that Stinga has no warranty,
  23. ' obligations, or liability for any sample application files.
  24. '-----------------------------------------------------------------------------
  25. Option Explicit
  26. Implements IModuleInterface
  27. 'used by row style condition that
  28. 'marks hidden files
  29. Implements IsgConditionTest
  30.  
  31. Private Const sgGRID_COL_COUNT = 5
  32.  
  33. Private mImageList As New CSysImageList
  34.  
  35. Private Type sgtypFileInfo
  36.    Icon As Long
  37.    Name As String * 255
  38.    Size As Single
  39.    FileType As String * 60
  40.    DateCreated As Date
  41.    Attributes As Integer
  42. End Type
  43.  
  44. Private Type sgtypFetchStatus
  45.    Loaded As Boolean
  46.    LastRow As Long
  47. End Type
  48.  
  49. Private marFiles() As sgtypFileInfo
  50. Private mFetchStatus As sgtypFetchStatus
  51.  
  52. Private WithEvents mGrid As SGGrid
  53. Attribute mGrid.VB_VarHelpID = -1
  54. Private msDirectory As String
  55.  
  56.  
  57. Private Function CashFiles(ByVal lRowIndex As Long) As Long
  58.       
  59.    If mFetchStatus.Loaded Then
  60.       If lRowIndex >= mFetchStatus.LastRow Then
  61.          CashFiles = -1
  62.       End If
  63.    Else
  64.       Dim I As Long
  65.       
  66.       For I = mFetchStatus.LastRow To lRowIndex
  67.          If DoFetchFiles(I) Then
  68.             mFetchStatus.Loaded = True
  69.             mFetchStatus.LastRow = I
  70.             mFetchStatus.Loaded = True
  71.             CashFiles = mFetchStatus.LastRow
  72.             mGrid.MaxRows = I + 1
  73.             Exit Function
  74.          End If
  75.       Next
  76.       mFetchStatus.LastRow = lRowIndex + 1
  77.       CashFiles = mFetchStatus.LastRow
  78.    End If
  79. End Function
  80.  
  81. Private Function IsPicture(sFileName As String) As Boolean
  82.    Dim sExt As String
  83.    
  84.    sExt = LCase(Right(sFileName, 3))
  85.    
  86.    IsPicture = CBool(InStr("gif;bmp;ico;jpg", sExt))
  87. End Function
  88.  
  89. Private Sub OpenFile(row As SGRow)
  90.    Dim lRowKey As Long
  91.    Dim sFileName As String
  92.    
  93.    On Error GoTo OpenFileError
  94.    
  95.    If row.Type <> sgSimpleRow Then Exit Sub
  96.    
  97.    With mGrid
  98.       lRowKey = row.Key
  99.       sFileName = msDirectory & .cell(lRowKey, "FileName").Value
  100.       
  101.       If .cell(lRowKey, "Attributes").Value And vbDirectory Then
  102.          'open new directory
  103.          msDirectory = sFileName & "\"
  104.          OpenFolder
  105.       Else
  106.          'open selected file
  107.          ShellExecute .Parent.hwnd, "open", _
  108.             sFileName, "", "", vbNormalFocus
  109.       End If
  110.    End With
  111.    
  112.    Exit Sub
  113. OpenFileError:
  114.    MsgBox VBA.Error, vbExclamation
  115.    Exit Sub
  116. End Sub
  117.  
  118. Private Sub OpenFolder()
  119.    Dim I As Long
  120.    
  121.    With mGrid
  122.       .RedrawEnabled = False
  123.       
  124.       With .Columns("Icon")
  125.          .ValueItems.RemoveAll
  126.          For I = 1 To mImageList.Count
  127.             .ValueItems.Add I, I, I
  128.          Next
  129.       End With
  130.       ReDim marFiles(1000) As sgtypFileInfo
  131.       mFetchStatus.LastRow = 0
  132.       mFetchStatus.Loaded = False
  133.       mGrid.CellsBorderVisible = False
  134.       .MaxRows = 4194304
  135.       .Groups.RemoveAll
  136.       .DataRowCount = 0
  137.       .RedrawEnabled = True
  138.  
  139.       .Scroll 3, 0
  140.       .Scroll -3, 0
  141.    End With
  142. End Sub
  143.  
  144. Private Sub Class_Initialize()
  145.    ReDim marFiles(1000) As sgtypFileInfo
  146. End Sub
  147.  
  148. Private Function IsgConditionTest_Test _
  149.    (ByVal Value As Variant, ByVal Tag As Variant) As Boolean
  150.    IsgConditionTest_Test = CLng(Value) And vbHidden
  151. End Function
  152.  
  153. Private Sub mGrid_AfterGroupChange(ByVal Operation As sgGroupOperation, _
  154.    ByVal GroupOrColIndex As Long)
  155.    mGrid.CellsBorderVisible = Not (mGrid.Groups.Count = 0)
  156.    
  157.    If Operation = sgGroupAdd Then
  158.       With mGrid.Groups(GroupOrColIndex)
  159.          .HeaderTextSource = sgGrpHdrFireFetchText
  160.          .PictureCollapsed = sgGroupHeaderFetchPicture   'sgGroupHeaderPicture
  161.          .PictureExpanded = sgGroupHeaderFetchPicture
  162.       End With
  163.    End If
  164. End Sub
  165.  
  166.  
  167.  
  168.  
  169. Private Sub mGrid_BeforeGroupChange(ByVal Operation As sgGroupOperation, ByVal GroupOrColIndex As Long, ByVal NewIndex As Long, SortOrder As sgSortOrder, SortType As sgSortType, ShowFooter As Boolean, Cancel As Boolean)
  170.    If Operation = sgGroupAdd Then
  171.       CashFiles 1000000
  172.    End If
  173. End Sub
  174.  
  175.  
  176. Private Sub mGrid_FetchCellTip _
  177.    (ByVal RowKey As Long, ByVal ColIndex As Long, _
  178.    ByVal CellKind As sgCellKind, _
  179.    Width As stdole.OLE_XSIZE_CONTAINER, _
  180.    Height As stdole.OLE_YSIZE_CONTAINER, CellTipText As String, _
  181.    Picture As Variant, ByVal TipStyle As IsgStyle)
  182.  
  183.    If CellKind = sgCellStandard Then
  184.       Dim row As SGRow, ar As SGArray
  185.       Dim lRowData As Long, varFieldSize As Variant
  186.       Dim iColData As Long, sFileName As String
  187.       
  188.       Set row = mGrid.Rows(RowKey)
  189.       
  190.       lRowData = row.DataIndex
  191.       If lRowData = -1 Then Exit Sub
  192.       Set ar = mGrid.Array
  193.       iColData = mGrid.Columns("FileName").DBIndex
  194.       sFileName = Trim(ar.Value(lRowData, iColData))
  195.       If IsPicture(sFileName) Then
  196.          On Error Resume Next
  197.          
  198.          Set Picture = LoadPicture(msDirectory & sFileName)
  199.          
  200.          If Err = 0 Then
  201.             CellTipText = ""
  202.             
  203.             With TipStyle
  204.                .AlphaLevel(sgAlphaBackground) = 255
  205.                .Appearance = sg3D
  206.                .BackColor = vbWhite
  207.                .PictureAlignment = sgPicAlignLeftTop
  208.             End With
  209.    
  210.             Height = Picture.Height ' / 2
  211.             Height = mGrid.Parent.ScaleY _
  212.                (Picture.Height, vbHimetric, mGrid.Parent.ScaleMode)
  213.             Exit Sub
  214.          End If
  215.       End If
  216.       'set picture
  217.       iColData = mGrid.Columns("Icon").DBIndex
  218.       Picture = CLng(ar.Value(lRowData, iColData))
  219.       'set CellTipText
  220.       CellTipText = sFileName
  221.       iColData = mGrid.Columns("FileType").DBIndex
  222.       CellTipText = CellTipText & vbCrLf & ar.Value(lRowData, iColData)
  223.       
  224.       iColData = mGrid.Columns("FileSize").DBIndex
  225.       varFieldSize = ar.Value(lRowData, iColData)
  226.       iColData = mGrid.Columns("FileSize").ColIndex
  227.       'use code from the FormatText event to format size
  228.       mGrid_FormatText RowKey, iColData, sgCellStandard, varFieldSize
  229.       CellTipText = CellTipText & vbCrLf & "Size: " & varFieldSize
  230.       iColData = mGrid.Columns("DateCreated").DBIndex
  231.       CellTipText = CellTipText & vbCrLf & "Date: " & ar.Value(lRowData, iColData)
  232.    
  233.       Width = 1600
  234.       
  235.       Set row = Nothing
  236.    ElseIf CellKind = sgCellGroupHeader Then
  237.       Height = 305
  238.       'use the FetchGroupHeaderData event to set text and picture
  239.       mGrid_FetchGroupHeaderData 1, RowKey, CellTipText, Picture, 0
  240.    Else
  241.       Exit Sub
  242.    End If
  243.    
  244.    'customize style
  245.    With TipStyle
  246.       .AlphaLevel(sgAlphaBackground) = 255
  247.       .AlphaLevel(sgAlphaBackgroundPicture) = 255
  248.       .Appearance = sg3D
  249.       .BackColor = vbWhite
  250.       .ForeColor = vbBlack
  251.       .WordWrap = True
  252.       .PictureAlignment = sgPicAlignLeftTop
  253.    End With
  254.       
  255. End Sub
  256.  
  257. Private Sub mGrid_FetchGroupHeaderData _
  258.    (ByVal GroupIndex As Integer, ByVal RowKey As Long, _
  259.    Text As String, PictureExpanded As Variant, PictureCollapsed As Variant)
  260.    Dim gh As SGGroupHeading
  261.    Dim iIcon As Long, col As SGColumn
  262.    
  263.    Set gh = mGrid.Rows(RowKey).GroupHeading
  264.    Set col = mGrid.Columns(gh.GroupDef.GroupingColumn)
  265.     
  266.    Text = " " & col.Caption & ": " & gh.GroupingValue
  267.    
  268.    If gh.ChildRows.Count > 0 And col.Key = "FileType" Then
  269.       If gh.ChildRows(1).Type = sgSimpleRow Then
  270.          Dim iIconColPos As Integer
  271.       
  272.          iIconColPos = mGrid.Columns("Icon").Position
  273.          iIcon = CLng(gh.ChildRows(1).Cells(iIconColPos).Value)
  274.          PictureExpanded = iIcon
  275.          PictureCollapsed = iIcon
  276.       End If
  277.    End If
  278.    
  279.    Set col = Nothing
  280.    Set gh = Nothing
  281. End Sub
  282.  
  283.  
  284. Private Sub mGrid_FetchScrollTip(ByVal bar As sgScrollTip, _
  285.    ByVal Index As Variant, Width As stdole.OLE_XSIZE_CONTAINER, _
  286.    Height As stdole.OLE_YSIZE_CONTAINER, ScrollTipText As String, _
  287.    Picture As Variant, ByVal TipStyle As IsgStyle)
  288.    Dim ck As sgCellKind
  289.  
  290.    ck = mGrid.Rows(Index).Cells(0).Kind
  291.    
  292.    
  293.    If ck = sgCellGroupHeader Or ck = sgCellStandard Then
  294.       mGrid_FetchCellTip Index, 1, _
  295.          ck, Width, Height, _
  296.          ScrollTipText, Picture, TipStyle
  297.    Else
  298.       ScrollTipText = ""
  299.    End If
  300. End Sub
  301.  
  302. Private Sub mGrid_KeyPress(KeyASCII As Integer)
  303.    If KeyASCII = vbKeyReturn Then
  304.       Dim lIndex As Long
  305.       
  306.       If mGrid.Rows.Current Is Nothing Then Exit Sub
  307.       
  308.       OpenFile mGrid.Rows.Current
  309.    ElseIf KeyASCII = vbKeyBack Then
  310.       Dim iPos As Integer
  311.       
  312.       iPos = InStrRev(msDirectory, "\", Len(msDirectory) - 1)
  313.       
  314.       If iPos = 0 Then Exit Sub
  315.       
  316.       msDirectory = Left(msDirectory, iPos)
  317.       
  318.       OpenFolder
  319.    End If
  320. End Sub
  321.  
  322. Private Function DoFetchFiles(lRowIndex As Long) As Boolean
  323.    Dim sTypeName As String
  324.    Dim sFile As String, lIcon As Long
  325.    
  326.    On Error GoTo FetchFilesError
  327.    
  328.    If lRowIndex = 0 Then
  329.       
  330.       If Len(msDirectory) = 0 Then Exit Function
  331.       sFile = Dir(msDirectory, vbDirectory + vbHidden + vbSystem)
  332.       
  333.       Do While (sFile = "." Or sFile = "..")
  334.          sFile = Dir
  335.       Loop
  336.       
  337.    Else
  338.       sFile = Dir
  339.    End If
  340.    
  341.    If Len(sFile) = 0 Then
  342.       DoFetchFiles = True
  343.       Exit Function
  344.    End If
  345.    
  346.    lIcon = mImageList.GetIconIndex(msDirectory & sFile, sTypeName)
  347.  
  348.    marFiles(lRowIndex).Name = sFile
  349.    marFiles(lRowIndex).Size = FileLen(msDirectory & sFile)
  350.    marFiles(lRowIndex).DateCreated = FileDateTime(msDirectory & sFile)
  351.    marFiles(lRowIndex).Icon = lIcon
  352.    marFiles(lRowIndex).FileType = sTypeName
  353.    marFiles(lRowIndex).Attributes = GetAttr(msDirectory & sFile)
  354.    
  355.    If lRowIndex >= UBound(marFiles) Then _
  356.       ReDim Preserve marFiles(lRowIndex + 500) As sgtypFileInfo
  357.                             
  358.    Exit Function
  359. FetchFilesError:
  360.    '53 file not found
  361.    If Err <> 5 And Err <> 53 Then
  362.       MsgBox VBA.Error, vbExclamation
  363.    End If
  364.    Resume Next
  365.    Resume Next
  366. End Function
  367.  
  368. Private Sub Class_Terminate()
  369.    Set mGrid = Nothing
  370.    Set mImageList = Nothing
  371. End Sub
  372.  
  373.  
  374. Private Property Set IModuleInterface_CellsImageList(ByVal RHS As MSComctlLib.IImageList)
  375.  
  376. End Property
  377.  
  378. Private Property Get IModuleInterface_CellsImageList() As MSComctlLib.IImageList
  379.  
  380. End Property
  381.  
  382. Private Property Let IModuleInterface_Directory(ByVal RHS As String)
  383.    msDirectory = RHS
  384. End Property
  385.  
  386. Private Property Get IModuleInterface_Directory() As String
  387.    IModuleInterface_Directory = msDirectory
  388. End Property
  389.  
  390. Private Property Let IModuleInterface_FolderType(ByVal RHS As Outlook.OlDefaultFolders)
  391.  
  392. End Property
  393.  
  394. Private Property Get IModuleInterface_FolderType() As Outlook.OlDefaultFolders
  395.  
  396. End Property
  397.  
  398. Private Property Set IModuleInterface_HeadImageList(ByVal RHS As MSComctlLib.IImageList)
  399.  
  400. End Property
  401.  
  402. Private Property Get IModuleInterface_HeadImageList() As MSComctlLib.IImageList
  403.  
  404. End Property
  405.  
  406. Private Property Let IModuleInterface_Key(ByVal RHS As String)
  407.  
  408. End Property
  409.  
  410. Private Property Get IModuleInterface_Key() As String
  411.  
  412. End Property
  413.  
  414. Private Property Set IModuleInterface_NameSpace(ByVal RHS As Outlook.NameSpace)
  415.  
  416. End Property
  417.  
  418. Private Property Get IModuleInterface_NameSpace() As Outlook.NameSpace
  419.  
  420. End Property
  421.  
  422. Private Property Set IModuleInterface_SGGrid(ByVal RHS As IsgGrid)
  423.    Set mGrid = RHS
  424. End Property
  425. Private Property Get IModuleInterface_SGGrid() As IsgGrid
  426.    Set IModuleInterface_SGGrid = mGrid
  427. End Property
  428.  
  429. Private Sub IModuleInterface_Show()
  430.    Dim I As Integer
  431.  
  432.    With mGrid
  433.       .RedrawEnabled = False
  434.       .BackColor = vbWhite
  435.       .GroupByBoxVisible = True
  436.       .PreviewPaneType = sgNoPreviewPane
  437.       .Columns.RemoveAll False
  438.       .Images = mImageList.hImageList
  439.       .DataRowCount = 0
  440.       .DefaultRowHeight = 285
  441.       .GridLines = sgGridLineNone
  442.       .CellsBorderVisible = False
  443.       .CellsBorderColor = vbButtonFace
  444.       .AlphaBlendEnabled = True
  445.       .Styles("InactiveSelection").BackColor = vbButtonFace
  446.       .Styles("InactiveSelection").ForeColor = vbBlack
  447.       .EqualRowHeight = True
  448.       .Font.Name = "Tahoma"
  449.       .AutoResize = sgNoAutoResize
  450.             
  451.       .AllowEdit = False
  452.       .FitLastColumn = True
  453.       .CacheAllRecords = True
  454.       .ColumnClickSort = True
  455.       'selection & drag-and-drop
  456.       .MultiSelect = sgMultiSelectExtended
  457.       .SpecialMode = sgModeListBox
  458.       .OLEDragMode = sgOLEDragModeAutomatic
  459.       'tool tips
  460.       .CellTips = sgCellTipsFloat
  461.       .CellTipsDelay = 500
  462.       .ScrollBarTrack = True
  463.       .ScrollBarTips = sgScrollTipsVertical
  464.       
  465.       .Columns.RemoveAll True
  466.  
  467.       With .Columns.Add("Icon")
  468.          .Width = 505
  469.          .Caption = "Icon"
  470.          .Style.DisplayType = sgDisplayPicture
  471.          For I = 1 To mImageList.Count
  472.             .ValueItems.Add I, I, I
  473.          Next
  474.       End With
  475.  
  476.       With .Columns.Add("FileName")
  477.          .Caption = "File Name"
  478.          .Width = 2400
  479.          .SortType = sgSortTypeCustom
  480.       End With
  481.  
  482.       With .Columns.Add("FileType")
  483.          .Caption = "File Type"
  484.          .Width = 1400
  485.       End With
  486.       
  487.       With .Columns.Add("FileSize")
  488.          .Caption = "Size"
  489.          .Style.Format = "FormatText Event"
  490.          .DataType = sgtLong
  491.          .SortType = sgSortTypeNumber
  492.       End With
  493.  
  494.       With .Columns.Add("DateCreated")
  495.          .Caption = "Date Created"
  496.          .Style.Format = "Short Date"
  497.          .DataType = sgtDateTime
  498.          .SortType = sgSortTypeDateTime
  499.       End With
  500.  
  501.       With .Columns.Add("Attributes")
  502.          .DataType = sgtLong
  503.          .Hidden = True
  504.       End With
  505.  
  506.       .DataMode = sgVirtualEvents
  507.       'create sytle condition for hidden files
  508.       With .Styles.Add("HiddenFile")
  509.          .AlphaLevel(sgAlphaContent) = 100
  510.       End With
  511.       
  512.       .RowStyleConditions.Add "HiddenFile", _
  513.          sgConditionCellValue, sgOpCallback, Me, , "Attributes"
  514.          
  515.       OpenFolder
  516.       
  517.       .RedrawEnabled = True
  518.       .Sort -1, -1, "FileName", sgSortAscending, sgSortTypeCustom
  519.    End With
  520. End Sub
  521.  
  522.  
  523. Private Sub mGrid_BeforeClickSort _
  524.    (ByVal ColIndex As Long, CancelSort As Boolean)
  525.    Dim col As SGColumn
  526.    
  527.    CashFiles 1000000
  528.    
  529.    Set col = mGrid.Columns(ColIndex)
  530.    
  531.    If col.Key = "FileName" Then
  532.       If col.SortOrder = sgSortAscending Then
  533.          mGrid.Sort -1, -1, "FileName", sgSortDescending, sgSortTypeCustom
  534.       Else
  535.          mGrid.Sort -1, -1, "FileName", sgSortAscending, sgSortTypeCustom
  536.       End If
  537.       
  538.       CancelSort = True
  539.    End If
  540.    
  541.    Set col = Nothing
  542. End Sub
  543.  
  544. Private Sub mGrid_CompareCells(ByVal RowKey1 As Long, _
  545.    ByVal ColIndex1 As Long, ByVal RowKey2 As Long, _
  546.    ByVal ColIndex2 As Long, Result As Integer)
  547.    Dim attr1 As Long, attr2 As Long
  548.    Dim val1 As String, val2 As String
  549.    
  550.    attr1 = mGrid.cell(RowKey1, "Attributes").Value
  551.    attr2 = mGrid.cell(RowKey2, "Attributes").Value
  552.    
  553.    If attr1 And vbDirectory Xor attr2 And vbDirectory Then
  554.       Result = IIf(attr1 And vbDirectory, -1, 1)
  555.    Else
  556.       val1 = mGrid.cell(RowKey1, "FileName")
  557.       val2 = mGrid.cell(RowKey2, "FileName")
  558.  
  559.       Result = IIf(val1 < val2, -1, 1)
  560.    End If
  561. End Sub
  562.  
  563. Private Sub mGrid_DblClick()
  564.  
  565.    If mGrid.MouseCol = -1 Or mGrid.MouseRow < 1 Then Exit Sub
  566.    
  567.    OpenFile mGrid.Rows.At(mGrid.MouseRow)
  568.  
  569. End Sub
  570.  
  571. Private Sub mGrid_FormatText(ByVal RowKey As Long, _
  572.    ByVal ColIndex As Long, _
  573.    ByVal CellKind As sgCellKind, Value As Variant)
  574.  
  575.    If mGrid.Rows.At(0).Key = RowKey Then Exit Sub
  576.    
  577.    If Value = 0 Then
  578.       Value = ""
  579.    Else
  580.       Dim lTmp As Long
  581.       lTmp = CLng(Value) \ 1024
  582.       If lTmp = 0 Then
  583.          Value = Trim(Value) & " B"
  584.       Else
  585.          Value = Format(lTmp, "#,##0") & " KB"
  586.       End If
  587.    End If
  588. End Sub
  589.  
  590.  
  591.  
  592.  
  593. Private Sub mGrid_VirtualReadData(ByVal RowBuffer As IsgRowBuffer)
  594.    Dim lRowIndex As Long
  595.    
  596.    lRowIndex = RowBuffer.rowIndex
  597.       
  598.    If CashFiles(lRowIndex) = -1 Then
  599.       RowBuffer.rowIndex = -1
  600.       Exit Sub
  601.    End If
  602.    
  603.    RowBuffer.Value(0) = marFiles(lRowIndex).Icon
  604.    RowBuffer.Value(1) = Trim(marFiles(lRowIndex).Name)
  605.    RowBuffer.Value(2) = Trim(marFiles(lRowIndex).FileType)
  606.    RowBuffer.Value(3) = marFiles(lRowIndex).Size
  607.    RowBuffer.Value(4) = marFiles(lRowIndex).DateCreated
  608.    RowBuffer.Value(5) = marFiles(lRowIndex).Attributes
  609. End Sub
  610.  
  611.  
  612.