Attribute VB_Name = "modGlobalData" '******************************************************************************* '* This is a part of the Microsoft DXSDK Code Samples. '* Copyright (C) 1999-2001 Microsoft Corporation. '* All rights reserved. '* This source code is only intended as a supplement to '* Microsoft Development Tools and/or SDK documentation. '* See these sources for detailed information regarding the '* Microsoft samples programs. '******************************************************************************* Option Explicit Option Base 0 Option Compare Text ' ************************************************************************************************************************************** ' * GLOBAL INTERFACE- DATA ' * ' * 'global timeline reference in application Global gbl_bstrLoadFile As String 'the last file name/path opened by the user Global gbl_colNormalEnum As Collection 'collection for maintaining node/object relational data Global gbl_objQuartzVB As VBQuartzHelper 'helper object for rendering filtergraph's using quartz.dll Global gbl_objTimeline As AMTimeline 'global application timeline Global gbl_objRenderEngine As RenderEngine 'global application render engine Global gbl_objFilterGraph As FilgraphManager 'global application filtergraph manager Global gbl_objDexterObject As AMTimelineObj 'global application dexter object (current object in treeview) ' ************************************************************************************************************************************** ' * PUBLIC INTERFACE- PROCEDURES ' * ' * ' ****************************************************************************************************************************** ' * procedure name: Main ' * procedure description: Application Entry Point ' * ' ****************************************************************************************************************************** Public Sub Main() Dim nStart As Long Dim nLength As Long Dim bstrFileName As String Dim boolDynamic As Boolean Dim boolPlayback As Boolean Dim boolSmartRecomp As Boolean Dim boolCloseOnComplete As Boolean Dim objLocalTimeline As AMTimeline On Local Error GoTo ErrLine 'inhibit dupe instances of this application If App.PrevInstance = False Then 'initalize global data Set gbl_objTimeline = New AMTimeline 'display the main form for the application Load frmMain: frmMain.Move 0, 0: frmMain.Show: frmMain.Refresh Else: Exit Sub End If 'handle command line If Command <> vbNullString Then 'check the command line argument(s) for a valid xtl filename with double quotes If InStr(1, UCase(Command), Chr(34)) > 0 Then nStart = InStr(1, UCase(Command), Chr(34)) nLength = InStr(nStart + 1, Command, Chr(34)) If nLength - nStart > Len(Command) Then bstrFileName = Mid(Command, nStart, nLength) End If bstrFileName = Trim(LCase(Command)) bstrFileName = Replace(bstrFileName, "/r", vbNullString) bstrFileName = Replace(bstrFileName, "/d", vbNullString) bstrFileName = Replace(bstrFileName, Chr(34), vbNullString) bstrFileName = Trim(bstrFileName) If InStr(1, bstrFileName, ".xtl") > 0 Then If InStr(1, bstrFileName, ".xtl") + 4 <> Len(bstrFileName) Then bstrFileName = Left(bstrFileName, InStr(1, bstrFileName, ".xtl") + 4) End If End If 'check the command line argument(s) for a valid xtl filename with single quotes ElseIf InStr(1, UCase(Command), Chr(39)) > 0 Then nStart = InStr(1, UCase(Command), Chr(39)) nLength = InStr(nStart + 1, Command, Chr(39)) If nLength - nStart > Len(Command) Then bstrFileName = Mid(Command, nStart, nLength) End If bstrFileName = Trim(LCase(Command)) bstrFileName = Replace(bstrFileName, "/r", vbNullString) bstrFileName = Replace(bstrFileName, "/d", vbNullString) bstrFileName = Replace(bstrFileName, Chr(39), vbNullString) bstrFileName = Trim(bstrFileName) If InStr(1, bstrFileName, ".xtl") > 0 Then If InStr(1, bstrFileName, ".xtl") + 4 <> Len(bstrFileName) Then bstrFileName = Left(bstrFileName, InStr(1, bstrFileName, ".xtl") + 4) End If End If 'check the command line argument(s) for a valid xtl filename with no quotes Else bstrFileName = Trim(LCase(Command)) bstrFileName = Replace(bstrFileName, "/r", vbNullString) bstrFileName = Replace(bstrFileName, "/d", vbNullString) bstrFileName = Trim(bstrFileName) If InStr(1, bstrFileName, ".xtl") > 0 Then If InStr(1, bstrFileName, ".xtl") + 4 <> Len(bstrFileName) Then bstrFileName = Left(bstrFileName, InStr(1, bstrFileName, ".xtl") + 4) End If End If End If 'check the command line argument(s) for smart recomp optional If InStr(1, UCase(Command), Space(1) & "/R") > 0 Then boolSmartRecomp = True End If 'check the command line argument(s) for dynamic connections optional If InStr(1, UCase(Command), Space(1) & "/D") > 0 Then boolDynamic = True End If 'check the command line argument(s) for playback optional If InStr(1, UCase(Command), Space(1) & "/P") > 0 Then boolPlayback = True End If 'check the command line argument(s) for close when finished optional If InStr(1, UCase(Command), Space(1) & "/C") > 0 Then boolCloseOnComplete = True End If End If 'proceed to load the xtl file into the application ide and render it If InStr(1, LCase(bstrFileName), ".xtl") > 0 Then 'at least it's been named an xtl file, proceed to attempt an import.. Set objLocalTimeline = New AMTimeline Call RestoreTimeline(objLocalTimeline, bstrFileName, DEXImportXTL) 'verify restoration If Not objLocalTimeline Is Nothing Then 'import succeeded; clean-up global scope If Not gbl_objTimeline Is Nothing Then Call ClearTimeline(gbl_objTimeline) Set gbl_objTimeline = Nothing End If 'assign the local timeline to global scope Set gbl_objTimeline = objLocalTimeline 'reset application-level filename gbl_bstrLoadFile = bstrFileName 'reset the caption on the application's main form bstrFileName = Mid(bstrFileName, InStrRev(bstrFileName, "\") + 1) frmMain.Caption = "DexterVB - " & bstrFileName Else: Exit Sub End If End If 'render the timeline and derive a filter graph manager Set gbl_objFilterGraph = RenderTimeline(gbl_objTimeline, boolDynamic, boolSmartRecomp) Set gbl_objQuartzVB.FilterGraph = gbl_objFilterGraph 'map the timeline to the userinterface Call GetTimelineDirect(frmMain.tvwSimpleTree, gbl_objTimeline, gbl_colNormalEnum) frmMain.mnuTimeLineClearRenderEngine.Enabled = False 'update the button(s) With frmMain.tbMain.Buttons .Item("Play").Image = 6 .Item("Pause").Image = 7 .Item("Stop").Image = 22 .Item("Rewind").Image = 18 .Item("FastForward").Image = 24 .Item("SeekForward").Image = 23 .Item("SeekBackward").Image = 19 .Item("Play").Enabled = True .Item("Pause").Enabled = True .Item("Stop").Enabled = False .Item("Rewind").Enabled = False .Item("FastForward").Enabled = False .Item("SeekForward").Enabled = False .Item("SeekBackward").Enabled = False End With 'update the state on the popup context menu frmMain.mnuTimeLinePlay.Enabled = True frmMain.mnuTimeLineStop.Enabled = False frmMain.mnuTimeLinePause.Enabled = True frmMain.mnuTimeLineRenderTimeLine.Enabled = False frmMain.mnuTimeLineClearRenderEngine.Enabled = False If boolPlayback Then 'run the graph Call gbl_objFilterGraph.Run 'if optional close on complete, unload when the timeline is finished rendering.. If boolCloseOnComplete = True Then Do Until gbl_objQuartzVB.Position = gbl_objQuartzVB.StopTime: DoEvents: DoEvents If frmMain.Visible = False Then Exit Do End If Loop Unload frmMain: Set frmMain = Nothing: Exit Sub End If End If 'clean-up & dereference If Not objLocalTimeline Is Nothing Then Set objLocalTimeline = Nothing Exit Sub ErrLine: Err.Clear Exit Sub End Sub