'****************************************************************
'* MMC automation / com event test script
'*
'* Copyright (C) Microsoft Corporation, 2000 - 2000
'****************************************************************

Option Explicit    ' Force explicit variable declaration.

'****************************************************************
'* Event Handlers : Application
'****************************************************************
Dim ErrorInEvent
ErrorInEvent = False

'---------------------------------------------
' Occurs when application is closed
'---------------------------------------------
Dim AppEvent_OnQuit_Application
Dim AppEvent_OnQuit_IsExpected

Sub AppEvent_OnQuit( Application )

  if Not AppEvent_OnQuit_IsExpected Then
    ErrorInEvent = True
    Err.Raise 100, "AppEvent_OnQuit", "Event occured when not expected"
  End if

  Set AppEvent_OnQuit_Application = Application

  Err.Raise 222, "--Not a bug--", "Returning error to test if script does not break MMC"

End Sub

'---------------------------------------------
' Occurs when document is opened
'---------------------------------------------
Dim AppEvent_OnDocumentOpen_Document
Dim AppEvent_OnDocumentOpen_bNew
Dim AppEvent_OnDocumentOpen_IsExpected

Sub AppEvent_OnDocumentOpen( Document, bNew )

  if Not AppEvent_OnDocumentOpen_IsExpected Then
    ErrorInEvent = True
    Err.Raise 100, "AppEvent_OnDocumentOpen", "Event occured when not expected"
  End if

  Set AppEvent_OnDocumentOpen_Document = Document
  AppEvent_OnDocumentOpen_bNew = bNew

  Err.Raise 222, "--Not a bug--", "Returning error to test if script does not break MMC"

End Sub

'****************************************************************
'* Event Handlers : Document
'****************************************************************

'---------------------------------------------
' Occurs before the document is destroyed
'---------------------------------------------
Dim AppEvent_OnDocumentClose_Document
Dim AppEvent_OnDocumentClose_IsExpected

Sub AppEvent_OnDocumentClose( Document)

  if Not AppEvent_OnDocumentClose_IsExpected Then
    ErrorInEvent = True
    Err.Raise 100, "AppEvent_OnDocumentClose", "Event occured when not expected"
  End if

  Set AppEvent_OnDocumentClose_Document = Document

  Err.Raise 222, "--Not a bug--", "Returning error to test if script does not break MMC"

End Sub

'---------------------------------------------
' Occurs when a snapin is added
'---------------------------------------------
Dim AppEvent_OnSnapInAdded_Document
Dim AppEvent_OnSnapInAdded_SnapIn
Dim AppEvent_OnSnapInAdded_IsExpected

Sub AppEvent_OnSnapInAdded( Document, SnapIn )

  if Not AppEvent_OnSnapInAdded_IsExpected Then
    ErrorInEvent = True
    Err.Raise 100, "AppEvent_OnSnapInAdded", "Event occured when not expected"
  End if

  Set AppEvent_OnSnapInAdded_Document = Document
  Set AppEvent_OnSnapInAdded_SnapIn = SnapIn

  Err.Raise 222, "--Not a bug--", "Returning error to test if script does not break MMC"

End Sub

'---------------------------------------------
' Occurs when the snapin is removed
'---------------------------------------------
Dim AppEvent_OnSnapInRemoved_Document
Dim AppEvent_OnSnapInRemoved_SnapIn
Dim AppEvent_OnSnapInRemoved_IsExpected

Sub AppEvent_OnSnapInRemoved( Document, SnapIn )

  if Not AppEvent_OnSnapInRemoved_IsExpected Then
    ErrorInEvent = True
    Err.Raise 100, "AppEvent_OnSnapInRemoved", "Event occured when not expected"
  End if

  Set AppEvent_OnSnapInRemoved_Document = Document
  Set AppEvent_OnSnapInRemoved_SnapIn = SnapIn

  Err.Raise 222, "--Not a bug--", "Returning error to test if script does not break MMC"

End Sub

'---------------------------------------------
' Occurs when a view is added
'---------------------------------------------
Dim AppEvent_OnNewView_View
Dim AppEvent_OnNewView_IsExpected

Sub AppEvent_OnNewView( View )

  if Not AppEvent_OnNewView_IsExpected Then
    ErrorInEvent = True
    Err.Raise 100, "AppEvent_OnNewView", "Event occured when not expected"
  End if

  Set AppEvent_OnNewView_View = View

  Err.Raise 222, "--Not a bug--", "Returning error to test if script does not break MMC"

End Sub

'---------------------------------------------
' Occurs when the view is destroyed
'---------------------------------------------
Dim AppEvent_OnViewClose_View
Dim AppEvent_OnViewClose_IsExpected

Sub AppEvent_OnViewClose( View )

  if Not AppEvent_OnViewClose_IsExpected Then
    ErrorInEvent = True
    Err.Raise 100, "AppEvent_OnViewClose", "Event occured when not expected"
  End if

  Set AppEvent_OnViewClose_View = View

  Err.Raise 222, "--Not a bug--", "Returning error to test if script does not break MMC"

End Sub

'---------------------------------------------
' Occurs when the view is changed, for instance by a scope node selection change
'---------------------------------------------
Dim AppEvent_OnViewChange_View
Dim AppEvent_OnViewChange_NewOwnerNode
Dim AppEvent_OnViewChange_IsExpected

Sub AppEvent_OnViewChange( View, NewOwnerNode )

  if Not AppEvent_OnViewChange_IsExpected Then
    ErrorInEvent = True
    Err.Raise 100, "AppEvent_OnViewChange", "Event occured when not expected"
  End if

  Set AppEvent_OnViewChange_View = View
  Set AppEvent_OnViewChange_NewOwnerNode = NewOwnerNode

  Err.Raise 222, "--Not a bug--", "Returning error to test if script does not break MMC"

End Sub

'---------------------------------------------
' Occurs when the result item selection for a view is changed
'---------------------------------------------
Dim AppEvent_OnSelectionChange_View
Dim AppEvent_OnSelectionChange_NewNodes
Dim AppEvent_OnSelectionChange_IsExpected

Sub AppEvent_OnSelectionChange( View, NewNodes )

  if Not AppEvent_OnSelectionChange_IsExpected Then
    ErrorInEvent = True
    Err.Raise 100, "AppEvent_OnSelectionChange", "Event occured when not expected"
  End if

  Set AppEvent_OnSelectionChange_View = View
  Set AppEvent_OnSelectionChange_NewNodes = NewNodes

  Err.Raise 222, "--Not a bug--", "Returning error to test if script does not break MMC"

End Sub

'---------------------------------------------
' Occurs when a context menu for a selection is created
'---------------------------------------------
Dim AppEvent_OnCreateContextMenu_View
Dim AppEvent_OnCreateContextMenu_Nodes
Dim AppEvent_OnCreateContextMenu_Menu
Dim AppEvent_OnCreateContextMenu_IsExpected

Sub AppEvent_OnCreateContextMenu( View, Nodes, Menu )

  if Not AppEvent_OnCreateContextMenu_IsExpected Then
    ErrorInEvent = True
    Err.Raise 100, "AppEvent_OnCreateContextMenu", "Event occured when not expected"
  End if

  Set AppEvent_OnCreateContextMenu_View = View
  Set AppEvent_OnCreateContextMenu_Nodes = Nodes
  Set AppEvent_OnCreateContextMenu_Menu = Menu

  Err.Raise 222, "--Not a bug--", "Returning error to test if script does not break MMC"

End Sub

'---------------------------------------------
' Occurs when a context menu item is executed
'---------------------------------------------
Dim AppEvent_OnContextMenuExecuted_IsExpected

Sub AppEvent_OnContextMenuExecuted( )

  if Not AppEvent_OnContextMenuExecuted_IsExpected Then
    ErrorInEvent = True
    Err.Raise 100, "AppEvent_OnContextMenuExecuted", "Event occured when not expected"
  End if

  Err.Raise 222, "--Not a bug--", "Returning error to test if script does not break MMC"

End Sub

'****************************************************************
'* Test Steps
'****************************************************************

'---------------------------------------------
' test step 1: Document open/save/new/close operations
'---------------------------------------------
Sub TestStep1 (app)

  WScript.Echo "test step 1: Document operations"

  '- - - - - - - - - - - - - - - - - - - - - - -
  ' save the document
  '- - - - - - - - - - - - - - - - - - - - - - -
  Dim console_path
  console_path = "c:\mmc_test_console.msc"
  app.Document.SaveAs console_path

  If 0 <> StrComp(app.Document.Name, console_path, 1) Then '**BUGBUG** Or Not app.Document.IsSaved Then
    Err.Raise 100, "TestStep1", "Failed save document: " + app.Document.Name
  End If

  '- - - - - - - - - - - - - - - - - - - - - - -
  ' close the document
  '- - - - - - - - - - - - - - - - - - - - - - -
  Dim doc
  Set doc = app.Document
  Set AppEvent_OnDocumentClose_Document = Nothing
  AppEvent_OnDocumentClose_IsExpected = True
  AppEvent_OnSelectionChange_IsExpected = True
  doc.Close False
  AppEvent_OnSelectionChange_IsExpected = False
  AppEvent_OnDocumentClose_IsExpected = False
  
  '- - - - - - - - - - - - - - - - - - - - - - -
  ' see if we've got a close event
  '- - - - - - - - - - - - - - - - - - - - - - -
  If Not AppEvent_OnDocumentClose_Document Is doc Then
    Err.Raise 100, "TestStep1", "Failed to catch close event"
  End If

  '- - - - - - - - - - - - - - - - - - - - - - -
  ' create a new document
  '- - - - - - - - - - - - - - - - - - - - - - -
  Set AppEvent_OnDocumentOpen_Document = Nothing
  AppEvent_OnDocumentOpen_IsExpected = True
  '**BUGBUG** "No method to create the new document" app.NewDocument
  AppEvent_OnDocumentOpen_IsExpected = False

  'if doc Is app.Document Then
  '  Err.Raise 100, "TestStep1", "Failed to create a new document"
  'End If

  'if Not AppEvent_OnDocumentOpen_Document Is app.Document Then
  '  Err.Raise 100, "TestStep1", "Failed to catch open event"
  'End If

  'if Not AppEvent_OnDocumentOpen_bNew then
  '  Err.Raise 100, "TestStep1", "Document incorrectly reported as loaded from file"
  'End If

  '- - - - - - - - - - - - - - - - - - - - - - -
  ' close the document again
  '- - - - - - - - - - - - - - - - - - - - - - -
  'Set doc = app.Document
  'Set AppEvent_OnDocumentClose_Document = Nothing
  'AppEvent_OnDocumentClose_IsExpected = True
  'doc.Close False
  'AppEvent_OnDocumentClose_IsExpected = False
  
  '- - - - - - - - - - - - - - - - - - - - - - -
  ' see if we've got a close event
  '- - - - - - - - - - - - - - - - - - - - - - -
  'If Not AppEvent_OnDocumentClose_Document Is doc Then
  '  Err.Raise 100, "TestStep1", "Failed to catch close event"
  'End If

  '- - - - - - - - - - - - - - - - - - - - - - -
  ' open a document
  '- - - - - - - - - - - - - - - - - - - - - - -
  Set AppEvent_OnDocumentOpen_Document = Nothing
  AppEvent_OnDocumentOpen_IsExpected = True
  AppEvent_OnSelectionChange_IsExpected = True '**BUGBUG** 
  AppEvent_OnViewChange_IsExpected = True '**BUGBUG** 
  AppEvent_OnNewView_IsExpected = True '**BUGBUG** 
  app.Load console_path
  AppEvent_OnNewView_IsExpected = False
  AppEvent_OnViewChange_IsExpected = False
  AppEvent_OnSelectionChange_IsExpected = False
  AppEvent_OnDocumentOpen_IsExpected = False

  if doc Is app.Document Then
    Err.Raise 100, "TestStep1", "Failed to open a document"
  End If

  if Not AppEvent_OnDocumentOpen_Document Is app.Document Then
    Err.Raise 100, "TestStep1", "Failed to catch open event"
  End If

  if AppEvent_OnDocumentOpen_Document Is doc Then
    Err.Raise 100, "TestStep1", "Wrong document cought in Open event"
  End If

  if AppEvent_OnDocumentOpen_bNew then
    Err.Raise 100, "TestStep1", "Document incorrectly reported as new"
  End If

  '- - - - - - - - - - - - - - - - - - - - - - -
  ' small cleanup
  '- - - - - - - - - - - - - - - - - - - - - - -
  Set AppEvent_OnDocumentClose_Document = Nothing
  Set AppEvent_OnDocumentOpen_Document = Nothing

  WScript.Echo "test step 1: complete"

End Sub

'---------------------------------------------
' test step 2:  Snapin add/remove operations
'---------------------------------------------
Sub TestStep2 (app)

  WScript.Echo "test step 2: Snapin operations"

  '- - - - - - - - - - - - - - - - - - - - - - -
  ' add the snapin
  '- - - - - - - - - - - - - - - - - - - - - - -
  Set AppEvent_OnSnapInAdded_Document = Nothing
  Set AppEvent_OnSnapInAdded_SnapIn = Nothing
  Dim FolderSnapin
  FolderSnapin = "{C96401CC-0E17-11D3-885B-00C04F72C717}"
  Dim Snapin1
  AppEvent_OnSnapInAdded_IsExpected = True
  AppEvent_OnSelectionChange_IsExpected = True '**BUGBUG** 
  AppEvent_OnViewChange_IsExpected = True '**BUGBUG** 
  set Snapin1 = app.Document.Snapins.Add(FolderSnapin)
  AppEvent_OnViewChange_IsExpected = False
  AppEvent_OnSelectionChange_IsExpected = False
  AppEvent_OnSnapInAdded_IsExpected = False

  if IsNull(Snapin1) Then
    Err.Raise 100, "TestStep2", "Failed to create snapin"
  End If
  
  if Not AppEvent_OnSnapInAdded_Document is app.Document Or Not AppEvent_OnSnapInAdded_SnapIn Is Snapin1 Then
    Err.Raise 100, "TestStep2", "Failed to catch AddSnapin event"
  End If

  '- - - - - - - - - - - - - - - - - - - - - - -
  ' add the snapin #2
  '- - - - - - - - - - - - - - - - - - - - - - -
  Set AppEvent_OnSnapInAdded_Document = Nothing
  Set AppEvent_OnSnapInAdded_SnapIn = Nothing
  Dim Snapin2
  AppEvent_OnSnapInAdded_IsExpected = True
  AppEvent_OnSelectionChange_IsExpected = True '**BUGBUG** 
  AppEvent_OnViewChange_IsExpected = True '**BUGBUG** 
  set Snapin2 = app.Document.Snapins.Add(FolderSnapin) '**BUGBUG** Snapin1) ' as child of Snapin1
  AppEvent_OnViewChange_IsExpected = False
  AppEvent_OnSelectionChange_IsExpected = False
  AppEvent_OnSnapInAdded_IsExpected = False

  if IsNull(Snapin2) Then
    Err.Raise 100, "TestStep2", "Failed to create snapin #2"
  End If
  
  if Not AppEvent_OnSnapInAdded_Document is app.Document Or Not AppEvent_OnSnapInAdded_SnapIn Is Snapin2 Then
    Err.Raise 100, "TestStep2", "Failed to catch AddSnapin #2 event"
  End If

  '- - - - - - - - - - - - - - - - - - - - - - -
  ' remove the snapin #2
  '- - - - - - - - - - - - - - - - - - - - - - -
  Set AppEvent_OnSnapInRemoved_Document = Nothing
  Set AppEvent_OnSnapInRemoved_SnapIn = Nothing

  AppEvent_OnSnapInRemoved_IsExpected = True
  AppEvent_OnSelectionChange_IsExpected = True '**BUGBUG** 
  AppEvent_OnViewChange_IsExpected = True '**BUGBUG** 
  app.Document.Snapins.Remove Snapin2
  AppEvent_OnViewChange_IsExpected = False
  AppEvent_OnSelectionChange_IsExpected = False
  AppEvent_OnSnapInRemoved_IsExpected = False

  if Not AppEvent_OnSnapInRemoved_Document is app.Document Or Not AppEvent_OnSnapInRemoved_SnapIn Is Snapin2 Then
    Err.Raise 100, "TestStep2", "Failed to catch RemoveSnapin #2 event"
  End If

  set Snapin2 = Nothing

  '- - - - - - - - - - - - - - - - - - - - - - -
  ' remove the snapin #1
  '- - - - - - - - - - - - - - - - - - - - - - -
  Set AppEvent_OnSnapInRemoved_Document = Nothing
  Set AppEvent_OnSnapInRemoved_SnapIn = Nothing

  AppEvent_OnSnapInRemoved_IsExpected = True
  AppEvent_OnSelectionChange_IsExpected = True '**BUGBUG** 
  AppEvent_OnViewChange_IsExpected = True '**BUGBUG** 
  app.Document.Snapins.Remove Snapin1
  AppEvent_OnViewChange_IsExpected = False
  AppEvent_OnSelectionChange_IsExpected = False
  AppEvent_OnSnapInRemoved_IsExpected = False

  if Not AppEvent_OnSnapInRemoved_Document is app.Document Or Not AppEvent_OnSnapInRemoved_SnapIn Is Snapin1 Then
    Err.Raise 100, "TestStep2", "Failed to catch RemoveSnapin event"
  End If

  '- - - - - - - - - - - - - - - - - - - - - - -
  ' re-add them to have test something to run test on
  '- - - - - - - - - - - - - - - - - - - - - - -
  AppEvent_OnSnapInAdded_IsExpected = True
  AppEvent_OnSelectionChange_IsExpected = True '**BUGBUG** 
  AppEvent_OnViewChange_IsExpected = True '**BUGBUG** 

  set Snapin1 = app.Document.Snapins.Add(FolderSnapin)
  set Snapin2 = app.Document.Snapins.Add(FolderSnapin) '**BUGBUG** Snapin1) ' as child of Snapin1

  AppEvent_OnViewChange_IsExpected = False
  AppEvent_OnSelectionChange_IsExpected = False
  AppEvent_OnSnapInAdded_IsExpected = False

  set Snapin1 = Nothing
  set Snapin2 = Nothing

  Set AppEvent_OnSnapInRemoved_Document = Nothing
  Set AppEvent_OnSnapInRemoved_SnapIn = Nothing
  Set AppEvent_OnSnapInAdded_Document = Nothing
  Set AppEvent_OnSnapInAdded_SnapIn = Nothing

  WScript.Echo "test step 2: complete"

End Sub

'---------------------------------------------
' test step 3: View open/close operations
'---------------------------------------------
Sub TestStep3 (app)

  WScript.Echo "test step 3: View operations"

  '- - - - - - - - - - - - - - - - - - - - - - -
  ' add the new view
  '- - - - - - - - - - - - - - - - - - - - - - -
  Set AppEvent_OnNewView_View = Nothing
  dim child
  set child = app.Document.ScopeNamespace.GetChild(app.Document.ScopeNamespace.GetRoot)

  '**BUGBUG** app.Document.Views.Add app.Document.ScopeNamespace.GetChild(child)
  AppEvent_OnNewView_IsExpected = True
  AppEvent_OnSelectionChange_IsExpected = True '**BUGBUG** 
  AppEvent_OnViewChange_IsExpected = True '**BUGBUG** 
  app.Document.Views.Add app.Document.ScopeNamespace.GetNext(child)
  AppEvent_OnViewChange_IsExpected = False
  AppEvent_OnSelectionChange_IsExpected = False
  AppEvent_OnNewView_IsExpected = False

  '- - - - - - - - - - - - - - - - - - - - - - -
  ' see if we've got an event
  '- - - - - - - - - - - - - - - - - - - - - - -
  if Not AppEvent_OnNewView_View is app.Document.Views(2) Then
    Err.Raise 100, "TestStep3", "Failed to catch NewView event"
  End If

  '- - - - - - - - - - - - - - - - - - - - - - -
  ' close the view
  '- - - - - - - - - - - - - - - - - - - - - - -
  Set AppEvent_OnViewClose_View = Nothing
  AppEvent_OnViewClose_IsExpected = True
  AppEvent_OnSelectionChange_IsExpected = True '**BUGBUG** 
  AppEvent_OnNewView_View.Close
  AppEvent_OnSelectionChange_IsExpected = False
  AppEvent_OnViewClose_IsExpected = False
  if Not AppEvent_OnNewView_View is AppEvent_OnViewClose_View Then
    Err.Raise 100, "TestStep3", "Failed to catch CloseView event"
  End If

  Set AppEvent_OnViewClose_View = Nothing
  Set AppEvent_OnNewView_View = Nothing

  WScript.Echo "test step 3: complete"

End Sub

'---------------------------------------------
' test step final: 
'---------------------------------------------
Sub TestStepFinal (app)

  WScript.Echo "test step final: Closing MMC"

  '- - - - - - - - - - - - - - - - - - - - - - -
  ' close the application
  '- - - - - - - - - - - - - - - - - - - - - - -
  Set AppEvent_OnQuit_Application = Nothing
  AppEvent_OnDocumentClose_IsExpected = True
  AppEvent_OnQuit_IsExpected = True
  AppEvent_OnSelectionChange_IsExpected = True '**BUGBUG** 
  app.Quit
  AppEvent_OnSelectionChange_IsExpected = False
  AppEvent_OnQuit_IsExpected = False
  AppEvent_OnDocumentClose_IsExpected = False

  '- - - - - - - - - - - - - - - - - - - - - - -
  ' see if we've got a close event
  '- - - - - - - - - - - - - - - - - - - - - - -
  If Not AppEvent_OnQuit_Application Is app Then
    Err.Raise 100, "TestStepFinal", "Failed to catch application close event"
  End If

  Set AppEvent_OnQuit_Application = Nothing

  WScript.Echo "test step final: complete"

End Sub

'****************************************************************
'* Main
'****************************************************************
Sub main

  WScript.Echo "Starting test pass for MMC events."

  AppEvent_OnQuit_IsExpected = False
  AppEvent_OnDocumentOpen_IsExpected = False
  AppEvent_OnDocumentClose_IsExpected = False
  AppEvent_OnSnapInAdded_IsExpected = False
  AppEvent_OnSnapInRemoved_IsExpected = False
  AppEvent_OnNewView_IsExpected = False
  AppEvent_OnViewClose_IsExpected = False
  AppEvent_OnViewChange_IsExpected = False
  AppEvent_OnSelectionChange_IsExpected = False
  AppEvent_OnCreateContextMenu_IsExpected = False
  AppEvent_OnContextMenuExecuted_IsExpected = False

  '- - - - - - - - - - - - - - - - - - - - - - -
  ' start mmc
  '- - - - - - - - - - - - - - - - - - - - - - -
  Dim mmc
  set mmc = wscript.CreateObject("MMC20.Application")

  '- - - - - - - - - - - - - - - - - - - - - - -
  ' connect objects to events
  '- - - - - - - - - - - - - - - - - - - - - - -
  wscript.ConnectObject mmc , "AppEvent_" 

  '- - - - - - - - - - - - - - - - - - - - - - -
  ' persform testing...
  '- - - - - - - - - - - - - - - - - - - - - - -
  TestStep1 mmc

    If ErrorInEvent Then
      Err.Raise 100, "Test", "Failed due to error in event handler"
    End If

  TestStep2 mmc

    If ErrorInEvent Then
      Err.Raise 100, "Test", "Failed due to error in event handler"
    End If

  TestStep3 mmc

    If ErrorInEvent Then
      Err.Raise 100, "Test", "Failed due to error in event handler"
    End If

'**commented to test exit on releasing all refs**  TestStepFinal mmc

    If ErrorInEvent Then
      Err.Raise 100, "Test", "Failed due to error in event handler"
    End If

  WScript.Echo ""
  WScript.Echo "Test pass completed without errors"
  WScript.Echo ""

  '- - - - - - - - - - - - - - - - - - - - - - -
  ' take a nap
  '- - - - - - - - - - - - - - - - - - - - - - -
  wscript.sleep 500

  '- - - - - - - - - - - - - - - - - - - - - - -
  ' cleanup
  '- - - - - - - - - - - - - - - - - - - - - - -
  Set mmc = Nothing

  Set AppEvent_OnQuit_Application = Nothing
  Set AppEvent_OnDocumentOpen_Document = Nothing
  Set AppEvent_OnDocumentOpen_bNew = Nothing
  Set AppEvent_OnDocumentClose_Document = Nothing
  Set AppEvent_OnSnapInAdded_Document = Nothing
  Set AppEvent_OnSnapInAdded_SnapIn = Nothing
  Set AppEvent_OnSnapInRemoved_Document = Nothing
  Set AppEvent_OnSnapInRemoved_SnapIn = Nothing
  Set AppEvent_OnNewView_View = Nothing
  Set AppEvent_OnViewClose_View = Nothing
  Set AppEvent_OnViewChange_View = Nothing
  Set AppEvent_OnViewChange_NewOwnerNode = Nothing
  Set AppEvent_OnSelectionChange_View = Nothing
  Set AppEvent_OnSelectionChange_NewNodes = Nothing
  Set AppEvent_OnCreateContextMenu_View = Nothing
  Set AppEvent_OnCreateContextMenu_Nodes = Nothing
  Set AppEvent_OnCreateContextMenu_Menu = Nothing

End Sub


'---------------------------------------------
' startup: call main
'---------------------------------------------
main