BROWSER.FRM

VERSION 4.00 
Begin VB.MDIForm frmBrowser
Appearance = 0 'Flat
BackColor = &H8000000C&
Caption = "SMS Browser"
ClientHeight = 4725
ClientLeft = 1995
ClientTop = 1785
ClientWidth = 7935
Height = 5415
Icon = "BROWSER.frx":0000
Left = 1935
LinkTopic = "Form1"
Top = 1155
Width = 8055
Begin VB.PictureBox picFormBackdrop
Align = 1 'Align Top
Appearance = 0 'Flat
BackColor = &H80000005&
BorderStyle = 0 'None
BeginProperty Font
name = "MS Sans Serif"
charset = 0
weight = 700
size = 8.25
underline = 0 'False
italic = 0 'False
strikethrough = 0 'False
EndProperty
ForeColor = &H80000008&
Height = 4335
Left = 0
ScaleHeight = 4335
ScaleWidth = 7935
TabIndex = 4
TabStop = 0 'False
Top = 0
Width = 7935
Begin VB.PictureBox picSeperator
Appearance = 0 'Flat
BackColor = &H80000005&
BeginProperty Font
name = "MS Sans Serif"
charset = 0
weight = 700
size = 8.25
underline = 0 'False
italic = 0 'False
strikethrough = 0 'False
EndProperty
ForeColor = &H80000008&
Height = 4215
Left = 3420
MousePointer = 9 'Size W E
ScaleHeight = 4185
ScaleWidth = 45
TabIndex = 5
TabStop = 0 'False
Top = 0
Width = 75
End
Begin VB.PictureBox picRightView
Appearance = 0 'Flat
BackColor = &H80000005&
BorderStyle = 0 'None
BeginProperty Font
name = "MS Sans Serif"
charset = 0
weight = 700
size = 8.25
underline = 0 'False
italic = 0 'False
strikethrough = 0 'False
EndProperty
ForeColor = &H80000008&
Height = 3495
Left = 3480
ScaleHeight = 3495
ScaleWidth = 3735
TabIndex = 7
TabStop = 0 'False
Top = 0
Width = 3735
Begin Threed.SSPanel pnlInfoHeader
Height = 255
Left = 0
TabIndex = 2
Top = 0
Width = 2895
_Version = 65536
_ExtentX = 5106
_ExtentY = 450
_StockProps = 15
Caption = "&Object Information"
BackColor = -2147483633
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
name = "MS Sans Serif"
charset = 0
weight = 700
size = 8.25
underline = 0 'False
italic = 0 'False
strikethrough = 0 'False
EndProperty
BevelWidth = 2
BorderWidth = 0
Autosize = 3
End
Begin VB.ListBox lstObjectInfo
Appearance = 0 'Flat
BeginProperty Font
name = "MS Sans Serif"
charset = 0
weight = 700
size = 8.25
underline = 0 'False
italic = 0 'False
strikethrough = 0 'False
EndProperty
Height = 3150
Left = 0
TabIndex = 3
Top = 240
Width = 2865
End
End
Begin VB.PictureBox picLeftView
Appearance = 0 'Flat
BackColor = &H80000005&
BorderStyle = 0 'None
BeginProperty Font
name = "MS Sans Serif"
charset = 0
weight = 700
size = 8.25
underline = 0 'False
italic = 0 'False
strikethrough = 0 'False
EndProperty
ForeColor = &H80000008&
Height = 4095
Left = 0
ScaleHeight = 4095
ScaleWidth = 3075
TabIndex = 6
TabStop = 0 'False
Top = 0
Width = 3075
Begin Threed.SSPanel pnlContainerHeader
Height = 255
Left = 0
TabIndex = 0
Top = 0
Width = 2175
_Version = 65536
_ExtentX = 3836
_ExtentY = 450
_StockProps = 15
Caption = "&Container"
BackColor = -2147483633
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
name = "MS Sans Serif"
charset = 0
weight = 700
size = 8.25
underline = 0 'False
italic = 0 'False
strikethrough = 0 'False
EndProperty
BevelWidth = 2
BorderWidth = 0
Autosize = 3
End
Begin MSOutl.Outline olnContainer
Height = 2715
Left = 0
TabIndex = 1
Top = 240
Width = 2175
_Version = 65536
_ExtentX = 3836
_ExtentY = 4789
_StockProps = 77
ForeColor = -2147483630
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
name = "MS Sans Serif"
charset = 0
weight = 700
size = 8.25
underline = 0 'False
italic = 0 'False
strikethrough = 0 'False
EndProperty
BorderStyle = 0
PicturePlus = "BROWSER.frx":030A
PictureMinus = "BROWSER.frx":047C
PictureLeaf = "BROWSER.frx":05EE
PictureOpen = "BROWSER.frx":0760
PictureClosed = "BROWSER.frx":08D2
End
End
End
Begin VB.Menu mnuFile
Caption = "&File"
Begin VB.Menu mnuFileNewContainer
Caption = "New &Container"
End
Begin VB.Menu mnuFileExit
Caption = "&Exit"
End
End
Begin VB.Menu mnuHelp
Caption = "&Help"
Begin VB.Menu mnuHelpAbout
Caption = "&About..."
End
End
End
Attribute VB_Name = "frmBrowser"
Attribute VB_Creatable = False
Attribute VB_Exposed = False
Option Explicit

Dim ghConnect&
Dim gContainerCount&

'Seperator dragging state and cursor offset
Dim SeperatorDragging%
Dim SeperatorDragOffset%

Private Function ConvertTimetToDateTime(timet&) As Double
Dim dtimet As Double

If timet < 0 Then
dtimet = CDbl(&H7FFFFFFF) + 1 + (timet Or &H7FFFFFFF)
Else: dtimet = CDbl(timet)
End If
ConvertTimetToDateTime = CVDate("1 Jan 1970") + dtimet / 86400
End Function

Private Function GetScalarTypeName$(scType As SCALARTYPE)
Select Case scType.enum
Case SCALAR_STRING.enum
GetScalarTypeName$ = "String"
Case SCALAR_INT.enum
GetScalarTypeName$ = "Number"
Case SCALAR_TIME.enum
GetScalarTypeName$ = "DateTime"
Case SCALAR_BINARY.enum
GetScalarTypeName$ = "Binary"
End Select
End Function

Private Sub MDIForm_Load()
Dim SqlConnectParams As SQL_CONNECT_PARAMS

'Get the size of one pixel size in twips
GetPixelSizeInTwips Me, X_PIX_SIZE, Y_PIX_SIZE

'Login to SMS
If DBLogin%(SqlConnectParams, ghConnect&) = False Then
'User canceled, so quit application
Unload Me
Exit Sub
End If

'Position Left View and controls (will be resized later)
picLeftView.left = 0
picLeftView.top = 0
pnlContainerHeader.left = 0
pnlContainerHeader.top = 0
olnContainer.left = 0
olnContainer.top = pnlContainerHeader.Height
picLeftView.Width = 2000

'Position View Seperator (will be resized later)
picSeperator.left = picLeftView.Width
picSeperator.top = -Y_PIX_SIZE

'Position Right View and controls (will be resized later)
picRightView.left = picSeperator.left + picSeperator.Width
picRightView.top = 0
pnlInfoHeader.left = 0
pnlInfoHeader.top = 0
lstObjectInfo.left = -X_PIX_SIZE
lstObjectInfo.top = pnlInfoHeader.Height - Y_PIX_SIZE

olnContainer.AddItem "SMS Containers", 0
olnContainer.Indent(0) = 1
olnContainer.ItemData(0) = AddOutlineEntry&(T_ROOTOBJECT, 0, 0, True)
olnContainer.ListIndex = 0

End Sub

Private Sub MDIForm_Resize()
Static OldHeight
Dim r As Rect, VBorderPixels%

'See if we're minimized
If WindowState = MINIMIZED Then Exit Sub

'Get client size of form (already in pixels, I find)
GetClientRect hwnd, r
VBorderPixels% = Height / Y_PIX_SIZE - r.bottom

If OldHeight <> Height Then
picFormBackdrop.Height = Height - Y_PIX_SIZE * VBorderPixels% - picFormBackdrop.top

OldHeight = Height
End If
End Sub

Private Sub MDIForm_Unload(Cancel As Integer)
Dim lRet&, ListIndex%

Me.Hide

Do While olnContainer.ListCount
olnContainer.Expand(0) = False
FreeOutlineEntry olnContainer.ItemData(0)
olnContainer.RemoveItem 0
Loop

DBLogout ghConnect&
End Sub

Private Sub mnuFileExit_Click()
Unload Me
End Sub

Private Sub mnuFileNewContainer_Click()
Dim ContainerName$, ContainerTag&, FolderInfo As FOLDER_INFO
Dim ListIndex%, lRet&

If NewContainer%(ghConnect&, ContainerName$, ContainerTag&) Then
lRet& = SmsDescribeFolder&(T_CONTAINER, ContainerTag&, FolderInfo)
If (lRet& <> SMS_OK) Then GoTo mnuFileNewContainerClickErr

ListIndex% = olnContainer.ListCount
olnContainer.AddItem ContainerName$ + " (" + FolderInfo.pszTag + ")", ListIndex%
olnContainer.Indent(ListIndex%) = 2
olnContainer.ItemData(ListIndex%) = AddOutlineEntry&(T_CONTAINER, ContainerTag&, 0&, True)
olnContainer.PictureType(ListIndex%) = MSOUTLINE_PICTURE_CLOSED
If Not olnContainer.Expand(0) Then olnContainer.Expand(0) = True
End If

Exit Sub

mnuFileNewContainerClickErr:
MsgBox "mnuFileNewContainer_Click: Unexpected error", MB_OK, Me.Caption
End Sub

Private Sub mnuHelpAbout_Click()
Dim Info$

Info$ = "SMS Browser" + Chr$(10) + Chr$(10) + "A Microsoft SMS SDK sample application"
Info$ = Info$ + Chr$(10) + "written in Microsoft Visual Basic 3.0 Professional Edition that"
Info$ = Info$ + Chr$(10) + "demonstrates the Visual Basic Wrapper DLL for SMS API."

SmsAbout "About SMS Browser", Info$
End Sub

Private Sub olnContainer_Click()
Dim SelEntry As OutlineEntryData
Static NextScalar As SCALAR, FilterInfo As FILTER_INFO
Dim Filters() As FILTER_INFO, FilterCount&
Dim FolderInfo As FOLDER_INFO, SubInfo As FOLDER_INFO, FolderTag&, FolderTagName$
Dim SMSAPIVersion$, Text$
Dim i%, j%, Row%, ListIndex%, DateTime#, lRet&, FilterIndex%, lFilterCount&
ReDim FolderTags&(0), FilterTags&(0), Scalars(0)

lstObjectInfo.Clear
Row% = 0

ListIndex% = olnContainer.ListIndex
GetOutlineEntry olnContainer.ItemData(ListIndex%), SelEntry
If SelEntry.Type.enum = T_ROOTOBJECT.enum Then
'Display the SMSAPI version string
lRet& = SmsAPIVer&(SMSAPIVersion$)
If (lRet& <> SMS_OK) Then GoTo olnContainerClickErr

lstObjectInfo.AddItem SMSAPIVersion$, Row%
Row% = Row% + 1

ElseIf SelEntry.Type.enum = T_CONTAINER.enum Then
'Get info on selected container
lRet& = SmsDescribeFolder&(T_CONTAINER, SelEntry.Tag&, FolderInfo)
If (lRet& <> SMS_OK) Then GoTo olnContainerClickErr

lstObjectInfo.AddItem FolderInfo.pszTag, Row%
Row% = Row% + 1

lstObjectInfo.AddItem Chr$(9) + "Folder Types:", Row%
Row% = Row% + 1

For i% = Row% To FolderInfo.ctFolders - 1 + Row%
lRet& = SmsDescribeFolder&(T_FOLDER, FolderInfo.FolderTags&(i% - Row%), SubInfo)
If (lRet& <> SMS_OK) Then GoTo olnContainerClickErr

lstObjectInfo.AddItem Chr$(9) + Chr$(9) + SubInfo.pszTag, Row%
Next i%
Row% = Row% + FolderInfo.ctFolders

lstObjectInfo.AddItem Chr$(9) + "Filter Types:", Row%
Row% = Row% + 1

lRet& = SmsEnumFilters(Filters, FilterCount&)
If (lRet& <> SMS_OK) Then GoTo olnContainerClickErr
For i% = Row% To FolderInfo.ctFilters - 1 + Row%
lstObjectInfo.AddItem Chr$(9) + Chr$(9) + Filters(FolderInfo.FilterTags(i% - Row%) - 1).szTag, Row%
Next i%
Row% = Row% + FolderInfo.ctFilters

ElseIf SelEntry.Type.enum = T_FOLDER.enum Then
'Get info on selected Folder
lRet& = SmsDescribeFolder&(T_FOLDER, SelEntry.Tag&, FolderInfo)
If (lRet& <> SMS_OK) Then GoTo olnContainerClickErr

lstObjectInfo.AddItem FolderInfo.pszTag, Row%
Row% = Row% + 1

lstObjectInfo.AddItem Chr$(9) + "Folder Types:", Row%
Row% = Row% + 1

For i% = Row% To FolderInfo.ctFolders - 1 + Row%
lRet& = SmsDescribeFolder&(T_FOLDER, FolderInfo.FolderTags&(i% - Row%), SubInfo)
If (lRet& <> SMS_OK) Then GoTo olnContainerClickErr

lstObjectInfo.AddItem Chr$(9) + Chr$(9) + SubInfo.pszTag, Row%
Next i%
Row% = Row% + FolderInfo.ctFolders

'Get list of possible scalar types
lstObjectInfo.AddItem Chr$(9) + "Scalar Types:", Row%
Row% = Row% + 1

For i% = Row% To FolderInfo.ctScalars - 1 + Row%
lstObjectInfo.AddItem Chr$(9) + Chr$(9) + FolderInfo.Scalars(i% - Row%).szName, Row%
Next i%
Row% = Row% + FolderInfo.ctScalars

ElseIf SelEntry.Type.enum = T_SCALAR.enum Then
lRet& = SmsRewind&(SelEntry.Handle&, RW_ALL)
If lRet& <> SMS_OK Then GoTo olnContainerClickErr

lRet& = SmsGetNextScalar&(SelEntry.Handle&, NextScalar)
Do While lRet& = SMS_OK
If olnContainer.List(ListIndex%) = NextScalar.pszName$ + " (" + GetScalarTypeName$(NextScalar.scType) + ")" Then
lstObjectInfo.AddItem GetScalarTypeName$(NextScalar.scType), Row%
Row% = Row% + 1
lstObjectInfo.AddItem Chr$(9) + "Value:", Row%
Row% = Row% + 1
Select Case NextScalar.scType.enum
Case SCALAR_STRING.enum
lstObjectInfo.AddItem Chr$(9) + Chr$(9) + CStr(NextScalar.pszValue), Row%
Row% = Row% + 1
Case SCALAR_INT.enum
lstObjectInfo.AddItem Chr$(9) + Chr$(9) + CStr(NextScalar.dwValue), Row%
Row% = Row% + 1
If NextScalar.bStringEquivalence Then
lstObjectInfo.AddItem Chr$(9) + "String Equivalent:", Row%
Row% = Row% + 1
lstObjectInfo.AddItem Chr$(9) + Chr$(9) + NextScalar.pszValue, Row%
Row% = Row% + 1
End If
Case SCALAR_TIME.enum
DateTime# = ConvertTimetToDateTime(NextScalar.tValue)
If IsDate(CVDate(DateTime#)) Then
lstObjectInfo.AddItem Chr$(9) + Chr$(9) + Format$(DateTime#, "ddd mmm dd yyyy hh:mm:ss") + " GMT", Row%
Else: lstObjectInfo.AddItem Chr$(9) + Chr$(9) + "<invalid date time>", Row%
End If
Row% = Row% + 1
If NextScalar.bStringEquivalence Then
lstObjectInfo.AddItem Chr$(9) + "String Equivalent:", Row%
Row% = Row% + 1
lstObjectInfo.AddItem Chr$(9) + Chr$(9) + NextScalar.pszValue, Row%
Row% = Row% + 1
End If
Case SCALAR_BINARY.enum
For i% = 0 To NextScalar.dwLen - 1 Step 16
If (i% = &H100 And NextScalar.dwLen > &H110) Then
i% = (NextScalar.dwLen - 1) And &HFFFFFFF0
lstObjectInfo.AddItem Chr$(9) + ":", Row%
Row% = Row% + 1
End If
Text$ = Hex$(i%)
Text$ = String$(8 - Len(Text$), "0") + Text$ + " "
For j% = 0 To 15
If (i% + j% >= NextScalar.dwLen) Then
Text$ = Text$ + ""
Else: Text$ = Text$ + " " + String$((NextScalar.pValue(i% + j%) > 15) + 1, "0") + Hex$(NextScalar.pValue(i% + j%))
End If
Next j%
lstObjectInfo.AddItem Chr$(9) + Text$, Row%
Row% = Row% + 1
Next i%
Case Else
GoTo olnContainerClickErr
End Select
lRet& = SMS_NO_MORE_DATA
Exit Do
End If
lRet& = SmsGetNextScalar&(SelEntry.Handle&, NextScalar)
Loop
If lRet& <> SMS_NO_MORE_DATA Then GoTo olnContainerClickErr

Else: GoTo olnContainerClickErr
End If

Exit Sub

olnContainerClickErr:
MsgBox "olnContainerClick:"
End Sub

Private Sub olnContainer_Collapse(ListIndex%)
Dim SelEntry As OutlineEntryData, DelEntry As OutlineEntryData
Dim NextListIndex%, FreeEntry%, lRet&
Static DepthOfRecursion%

DepthOfRecursion% = DepthOfRecursion% + 1

NextListIndex% = ListIndex% + 1
Do While NextListIndex% < olnContainer.ListCount
If olnContainer.Indent(NextListIndex%) <= olnContainer.Indent(ListIndex%) Then Exit Do
olnContainer.Expand(NextListIndex%) = False

FreeEntry% = False
GetOutlineEntry olnContainer.ItemData(NextListIndex%), DelEntry
If DelEntry.Type.enum = T_ROOTOBJECT.enum Then
'Nothing to do

ElseIf DelEntry.Type.enum = T_CONTAINER.enum Then
If DelEntry.Handle& <> 0 Then
lRet& = SmsCloseContainer&(DelEntry.Handle&)
If (lRet& <> SMS_OK) Then GoSub olnContainerCollapseErr

DelEntry.Handle& = 0
DelEntry.RetrieveData% = True
SetOutlineEntry olnContainer.ItemData(NextListIndex%), DelEntry
End If

ElseIf DelEntry.Type.enum = T_FOLDER.enum Then
If DelEntry.Handle& <> 0 Then
lRet& = SmsCloseFolder&(DelEntry.Handle&)
End If
If (lRet& <> SMS_OK) Then GoSub olnContainerCollapseErr
FreeEntry% = True

ElseIf DelEntry.Type.enum = T_SCALAR.enum Then
FreeEntry% = True

Else: GoTo olnContainerCollapseErr
End If

If FreeEntry% Then
FreeOutlineEntry olnContainer.ItemData(NextListIndex%)
olnContainer.RemoveItem NextListIndex%
Else
NextListIndex% = NextListIndex% + 1
End If
Loop

GetOutlineEntry olnContainer.ItemData(ListIndex%), SelEntry
If SelEntry.RetrieveData% = False Then
SelEntry.RetrieveData% = True
SetOutlineEntry olnContainer.ItemData(ListIndex%), SelEntry
End If

If olnContainer.PictureType(ListIndex%) = MSOUTLINE_PICTURE_OPEN Then
olnContainer.PictureType(ListIndex%) = MSOUTLINE_PICTURE_CLOSED
End If

DepthOfRecursion% = DepthOfRecursion% - 1
If DepthOfRecursion% = 0 Then
olnContainer.ListIndex = ListIndex%
olnContainer_Click
End If

Exit Sub

olnContainerCollapseErr:
MsgBox "Unexpected error collapsing item " + CStr(ListIndex%), MB_ICONEXCLAMATION, Me.Caption
DepthOfRecursion% = DepthOfRecursion% - 1
Return
End Sub

Private Sub olnContainer_DblClick()
olnContainer.Expand(olnContainer.ListIndex) = Not olnContainer.Expand(olnContainer.ListIndex)
End Sub

Private Sub olnContainer_Expand(ListIndex%)
Dim SelEntry As OutlineEntryData
Dim FolderInfo As FOLDER_INFO, NextScalar As SCALAR
Dim hSubFolder&, SubFolderType&, SubFolderTypeName$
Dim SubFolderID$
Dim i%, OldMousePointer%, lRet&

GetOutlineEntry olnContainer.ItemData(ListIndex%), SelEntry
If SelEntry.RetrieveData% Then
'Put up the wait cursor
OldMousePointer = MousePointer
MousePointer = HOURGLASS

If SelEntry.Type.enum = T_ROOTOBJECT.enum Then
'Nothing to do

ElseIf SelEntry.Type.enum = T_CONTAINER.enum Then
'Rewind or open/fill the container
If SelEntry.Handle& <> 0& Then
lRet& = SmsRewind&(SelEntry.Handle&, RW_ALL)
If lRet& <> SMS_OK Then GoTo olnContainerExpandErr
Else
lRet& = SmsOpenContainer&(SelEntry.Tag&, ghConnect&, SelEntry.Handle&)
If lRet& <> SMS_OK Then GoTo olnContainerExpandErr

lRet& = SmsPopulate&(SelEntry.Handle&, POP_SYNC, ByVal 0&)
If lRet& <> SMS_OK And lRet& <> SMS_EMPTY Then GoTo olnContainerExpandErr
End If

'List the folders in this container
i% = 1
lRet& = SmsGetNextFolder&(SelEntry.Handle&, F_ANY, hSubFolder&)
Do While lRet& = SMS_OK
lRet& = SmsGetFolderID&(hSubFolder&, SubFolderID$)
If lRet& <> SMS_OK Then GoTo olnContainerExpandErr

lRet& = SmsGetFolderType&(hSubFolder&, SubFolderType&, SubFolderTypeName$)
If lRet& <> SMS_OK Then GoTo olnContainerExpandErr

If SelEntry.Tag = C_SITE Then
'Only list top level Site folders (Depth = 0)
lRet& = SmsGetScalarByName&(hSubFolder&, "Depth", NextScalar)
If lRet& <> SMS_OK Then GoTo olnContainerExpandErr
Else
'List all sub folders
NextScalar.dwValue = 0
End If

If NextScalar.dwValue = 0 Then
olnContainer.AddItem SubFolderID$ + " (" + SubFolderTypeName$ + ")", ListIndex% + i%
olnContainer.Indent(ListIndex% + i%) = olnContainer.Indent(ListIndex%) + 1
olnContainer.ItemData(ListIndex% + i%) = AddOutlineEntry(T_FOLDER, SubFolderType&, hSubFolder&, True)
olnContainer.PictureType(ListIndex% + i%) = MSOUTLINE_PICTURE_CLOSED
Else
lRet& = SmsCloseFolder&(hSubFolder&)
End If

lRet& = SmsGetNextFolder&(SelEntry.Handle&, F_ANY, hSubFolder&)
i% = i% + 1
Loop
If lRet& <> SMS_NO_MORE_DATA Then GoTo olnContainerExpandErr

ElseIf SelEntry.Type.enum = T_FOLDER.enum Then
If SelEntry.Handle& = 0& Then
GoTo olnContainerExpandErr
Else
lRet& = SmsRewind&(SelEntry.Handle&, RW_ALL)
If lRet& <> SMS_OK Then GoTo olnContainerExpandErr
End If

'First list the sub-folders in this folder
i% = 1
lRet& = SmsGetNextFolder&(SelEntry.Handle&, F_ANY, hSubFolder&)
Do While lRet& = SMS_OK
lRet& = SmsGetFolderID&(hSubFolder&, SubFolderID$)
If lRet& <> SMS_OK Then GoTo olnContainerExpandErr

lRet& = SmsGetFolderType&(hSubFolder&, SubFolderType&, SubFolderTypeName$)
If lRet& <> SMS_OK Then GoTo olnContainerExpandErr

olnContainer.AddItem SubFolderID$ + " (" + SubFolderTypeName$ + ")", ListIndex% + i%
olnContainer.Indent(ListIndex% + i%) = olnContainer.Indent(ListIndex%) + 1
olnContainer.ItemData(ListIndex% + i%) = AddOutlineEntry(T_FOLDER, SubFolderType&, hSubFolder&, True)
olnContainer.PictureType(ListIndex% + i%) = MSOUTLINE_PICTURE_CLOSED

lRet& = SmsGetNextFolder&(SelEntry.Handle&, F_ANY, hSubFolder&)
i% = i% + 1
Loop
If lRet& <> SMS_NO_MORE_DATA Then GoTo olnContainerExpandErr

'Next list the scalars in this folder
lRet& = SmsGetNextScalar&(SelEntry.Handle&, NextScalar)
Do While lRet& = SMS_OK
olnContainer.AddItem NextScalar.pszName$ + " (" + GetScalarTypeName$(NextScalar.scType) + ")", ListIndex% + i%
olnContainer.Indent(ListIndex% + i%) = olnContainer.Indent(ListIndex%) + 1
olnContainer.ItemData(ListIndex% + i%) = AddOutlineEntry(T_SCALAR, NextScalar.scType.enum, SelEntry.Handle&, True)
olnContainer.PictureType(ListIndex% + i%) = MSOUTLINE_PICTURE_LEAF

lRet& = SmsGetNextScalar&(SelEntry.Handle&, NextScalar)
i% = i% + 1
Loop
If lRet& <> SMS_NO_MORE_DATA Then GoTo olnContainerExpandErr

ElseIf SelEntry.Type.enum = T_SCALAR.enum Then
'Nothing to do

Else: GoTo olnContainerExpandErr
End If

SelEntry.RetrieveData% = False
SetOutlineEntry olnContainer.ItemData(ListIndex%), SelEntry
olnContainer.Expand(ListIndex%) = True

'Restore the mouse pointer
MousePointer = OldMousePointer%
Else

If olnContainer.PictureType(ListIndex%) = MSOUTLINE_PICTURE_CLOSED Then
olnContainer.PictureType(ListIndex%) = MSOUTLINE_PICTURE_OPEN
ElseIf olnContainer.PictureType(ListIndex%) = MSOUTLINE_PICTURE_OPEN Then
olnContainer.Expand(ListIndex%) = False
End If

olnContainer.ListIndex = ListIndex%
olnContainer_Click
End If

Exit Sub

olnContainerExpandErr:
MsgBox "olnContainer_Expand: Unexpected error"

'Restore the mouse pointer
MousePointer = OldMousePointer%
End Sub

Private Sub olnContainer_PictureClick(ListIndex As Integer)
olnContainer.ListIndex = ListIndex
olnContainer_Click
End Sub

Private Sub olnContainer_PictureDblClick(ListIndex As Integer)
olnContainer_PictureClick ListIndex
olnContainer_DblClick
End Sub

Private Sub picFormBackdrop_Resize()
Static OldWidth, OldHeight, OldSepLeft%

If (OldWidth <> picFormBackdrop.Width Or OldSepLeft <> picSeperator.left) And picFormBackdrop.Width > picRightView.left Then
picRightView.Width = picFormBackdrop.Width - picRightView.left

OldWidth = picFormBackdrop.Width
End If

If OldHeight <> picFormBackdrop.Height And picFormBackdrop.Height > picLeftView.top Then
picLeftView.Height = picFormBackdrop.Height - picLeftView.top
picRightView.Height = picFormBackdrop.Height - picRightView.top
picSeperator.Height = picFormBackdrop.Height - picSeperator.top + Y_PIX_SIZE

OldHeight = picFormBackdrop.Height
OldSepLeft = picSeperator.left
End If
End Sub

Private Sub picLeftView_Resize()
Static OldWidth, OldHeight

If OldWidth <> picLeftView.Width Then
pnlContainerHeader.Width = picLeftView.Width
olnContainer.Width = picLeftView.Width

OldWidth = picLeftView.Width
End If

If OldHeight <> picLeftView.Height And picLeftView.Height > olnContainer.top Then

olnContainer.Height = picLeftView.Height - olnContainer.top 

OldHeight = picLeftView.Height
End If
End Sub

Private Sub picRightView_Resize()
Static OldWidth, OldHeight, lItemHeight&

If OldWidth <> picRightView.Width Then
pnlInfoHeader.Width = picRightView.Width
lstObjectInfo.Width = picRightView.Width - lstObjectInfo.left + X_PIX_SIZE

OldWidth = picLeftView.Width
End If

If OldHeight <> picRightView.Height And picRightView.Height > pnlInfoHeader.Height Then
lItemHeight& = SendMessage(lstObjectInfo.hwnd, LB_GETITEMHEIGHT, 0, 0)
lstObjectInfo.Height = picRightView.Height - lstObjectInfo.top + lItemHeight& * Y_PIX_SIZE

OldWidth = picLeftView.Width
End If
End Sub

Private Sub picSeperator_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
If Button And LEFT_BUTTON Then
SeperatorDragging% = True
SeperatorDragOffset% = x
End If
End Sub

Private Sub picSeperator_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim OldLeft%

If SeperatorDragging% And x <> OldLeft% And picSeperator.left + x - SeperatorDragOffset% > 0 Then
picSeperator.left = picSeperator.left + x - SeperatorDragOffset%
picLeftView.Width = picSeperator.left
picRightView.left = picSeperator.left + picSeperator.Width
picFormBackdrop_Resize
End If
End Sub

Private Sub picSeperator_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
If Button And LEFT_BUTTON Then
SeperatorDragging% = False
End If
End Sub