# Fire Application and Document Events Example (VBA)

This example shows how to fire application and document events.

'-----------------------------------------------------------------

' Preconditions:
' 1. Create a VBA macro in a software product in which VBA is
' embedded.
' 2. Copy and paste this example into the Visual Basic IDE.
' a. In Modules, copy and paste the Main module.
' b. Insert a class called Class1, and paste the Class1 module.
' c. Insert a class called Class2, and paste the Class2 module.
' 3. Add a reference to the DraftSight type library,
' install_dir\bin\dsAutomation.dll.
' 4. Change the path and file name of the image file to insert.
' NOTE: The image file must be a PNG file.
' 5. Start DraftSight, create, save, and close a drawing
' named c:\test\circle.dwg.
' 6. Set a breakpoint in the project where the project connects to
' DraftSight.
' 7. Press F8 to step through the project.
'
' Postconditions: Message boxes pop up for all events,
' regardless if fired. Read the text in each message box
' before clicking OK to close it.

'------------------------------------------------------------------

    'Main module
    Option Explicit

    Public dsAppEvents As Class1
    Public dsDocEvents As Class2

    Public dsApp As DraftSight.Application
    Public dsDoc As DraftSight.Document
    Public docName As String

    Public filePreOpenNotify As Boolean
    Public filePostOpenNotify As Boolean
    Public fileModifyNotify As Boolean
    Public fileSavePreNotify As Boolean
    Public fileSavePostNotify As Boolean
    Public docDestroyNotify As Boolean

    Sub main()

            'Connect to DraftSight
            Set dsApp = GetObject(, "DraftSight.Application")
            'Abort any command currently running in DraftSight
            'to avoid nested commands
            dsApp.AbortRunningCommand

            'Document to open
            docName = "c:\test\circle.dwg"

            'Set up events
            Set dsAppEvents = New Class1
            Set dsDocEvents = New Class2
            Set dsAppEvents = New Class1
            Set dsAppEvents.app = dsApp

            'Open document
            TestFileOpenEvents

            'Modify document
            TestFileModifyEvents

            'Save document as a different document
            TestFileSaveEvents

            'Close open document
            CloseAllDocuments

    End Sub

    Public Sub TestFileOpenEvents()

            'Open document
            Set dsDoc = dsApp.OpenDocument2(docName, dsDocumentOpenOption_e.dsDocumentOpen_Default, dsEncoding_e.dsEncoding_Default)

            Set dsDocEvents = New Class2
            Set dsDocEvents.doc = dsDoc

            If Not dsDoc Is Nothing Then
                If False = filePreOpenNotify Then
                    MsgBox ("FileOpenPreNotify event wasn't fired while opening a document.")
                End If
                If False = filePostOpenNotify Then
                    MsgBox ("FileOpenPostNotify event wasn't fired while opening a document.")
                End If
            Else
                MsgBox ("OpenDocument method returns Nothing for '" & docName & "' document.")
            End If

    End Sub

        Public Sub TestFileModifyEvents()

            Dim imageFileName As String
            imageFileName = "c:\test\note.png"

            Dim dsPicture As DraftSight.ReferenceImage
            Dim dsModel As DraftSight.Model
            Dim dsSketchMgr As DraftSight.SketchManager

            If Not dsDoc Is Nothing Then
                'Get model space
                Set dsModel = dsDoc.GetModel
                If Not dsModel Is Nothing Then
                    'Get sketch manager
                    Set dsSketchMgr = dsModel.GetSketchManager
                    If Not dsSketchMgr Is Nothing Then
                        fileModifyNotify = False
                        'Insert a picture in the model
                        Set dsPicture = dsSketchMgr.InsertPicture(imageFileName, 0#, 0#, 0#, 1#, 0#)
                        If Not dsPicture Is Nothing Then
                            'Check if ModifyNotify event is fired
                            If False = fileModifyNotify Then
                                MsgBox ("ModifyNotify event wasn't fired while inserting a picture in the document.")
                            End If
                        Else
                            MsgBox ("ISketchManager::InsertPicture method returns Nothing for the '" & dsDoc.GetPathName & "' document")
                        End If
                    Else
                        MsgBox ("IModel.GetSketchManager method returns Nothing for the '" & dsDoc.GetPathName & "' document.")
                    End If
                Else
                    MsgBox ("IDocument.GetModel method returns Nothing for the " & dsDoc.GetPathName & " document.")
                End If
            Else
                MsgBox ("IApplication.OpenDocument method returns Nothing for the " & docName & " document.")
            End If
        End Sub
        Public Sub TestFileSaveEvents()

            Dim savedDocName As String
            Dim saveError As Long

            If Not dsDoc Is Nothing Then
                fileSavePreNotify = False
                fileSavePostNotify = False
                'Save document
                savedDocName = docName & "_saved.dwg"
                dsDoc.SaveAs2 savedDocName, dsDocumentSaveAs_R2010_DWG, True, saveError
                If saveError <> dsDocumentSave_Succeeded Then
                    MsgBox ("SaveAs method returns '" & saveError & "' error.")
                Else
                    'Check FileSavePreNotify and FileSavePostNotify events
                    If False = fileSavePreNotify Then
                        MsgBox ("FileSavePreNotify event wasn't fired after saving the '" & docName & "' document")
                    End If
                    If False = fileSavePostNotify Then
                        MsgBox ("FileSavePostNotify event wasn't fired after saving the '" & docName & "' document")
                    End If
                End If
            Else
                MsgBox ("OpenDocument method returns Nothing for the '" & docName & "' document.")
            End If
        End Sub
        Public Sub CloseAllDocuments()

            Dim dsDocs As Variant
            Dim index As Long
            Dim pathName As String

            'Get documents
            dsDocs = dsApp.GetDocuments
            If IsArray(dsDocs) Then
                For index = LBound(dsDocs) To UBound(dsDocs)
                    Set dsDoc = dsDocs(index)
                    pathName = dsDoc.GetPathName
                    dsApp.CloseDocument pathName, False
                    If False = docDestroyNotify Then
                        MsgBox ("DestroyNotify event wasn't fired after closing a document.")
                    End If
                Next
            End If
        End Sub

    'Class1 module
    Option Explicit

    Public WithEvents app As DraftSight.Application

        Public Sub app_FileOpenPostNotify(ByVal doc As DraftSight.Document)
            filePostOpenNotify = True
            MsgBox ("FileOpenPostNotify event was fired while opening a document.")
        End Sub

        Public Sub app_FileOpenPreNotify(ByVal fileName As String, ByVal appOption As dsDocumentOpenOption_e)
            filePreOpenNotify = True
            MsgBox ("FileOpenPreNotify event was fired while opening a document.")
        End Sub

    'Class2 module
    Option Explicit

    Public WithEvents doc As DraftSight.Document

        Public Sub doc_DestroyNotify()
            docDestroyNotify = True
            MsgBox ("DestroyNotify event was fired after closing a document.")
        End Sub
        Public Sub doc_FileSavePostNotify()
            fileSavePostNotify = True
            MsgBox ("FileSavePostNotify event was fired after saving the '" & docName & "' document")
        End Sub
        Public Sub doc_FileSavePreNotify(ByVal fileName As String, ByVal saveOption As dsDocumentSaveAsOption_e)
            fileSavePreNotify = True
            MsgBox ("FileSavePreNotify event was fired after saving the '" & fileName & "' document")
        End Sub
        Public Sub doc_ModifyNotify()
            fileModifyNotify = True
            MsgBox ("ModifyNotify event was fired while inserting a picture in document.")
        End Sub