home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 4_2005-2006.ISO / data / Zips / CodeHelp_A1935969282005.psc / CHCore / Connect.Dsr < prev    next >
Text File  |  2005-09-24  |  8KB  |  258 lines

  1. VERSION 5.00
  2. Begin {AC0714F6-3D04-11D1-AE7D-00A0C90F26F4} Connect 
  3.    ClientHeight    =   8490
  4.    ClientLeft      =   1740
  5.    ClientTop       =   1545
  6.    ClientWidth     =   13350
  7.    _ExtentX        =   23548
  8.    _ExtentY        =   14975
  9.    _Version        =   393216
  10.    Description     =   "CodeHelp Core IDE Extender Framework"
  11.    DisplayName     =   "CodeHelp IDE Extender"
  12.    AppName         =   "Visual Basic"
  13.    AppVer          =   "Visual Basic 98 (ver 6.0)"
  14.    LoadName        =   "Command Line / Startup"
  15.    LoadBehavior    =   5
  16.    RegLocation     =   "HKEY_CURRENT_USER\Software\Microsoft\Visual Basic\6.0"
  17.    CmdLineSupport  =   -1  'True
  18. End
  19. Attribute VB_Name = "Connect"
  20. Attribute VB_GlobalNameSpace = False
  21. Attribute VB_Creatable = True
  22. Attribute VB_PredeclaredId = False
  23. Attribute VB_Exposed = True
  24. Option Explicit
  25.  
  26. Private m_VBE                   As VBIDE.VBE
  27. Private cbarCodeHelp            As CommandBarControl
  28. Private WithEvents ctlAbout     As CommandBarEvents
  29. Attribute ctlAbout.VB_VarHelpID = -1
  30. Private WithEvents ctlPlugins   As CommandBarEvents
  31. Attribute ctlPlugins.VB_VarHelpID = -1
  32. Private coreGroup               As CommandBarControl
  33. Private m_AddInInst             As Object
  34. Implements ICHCore
  35.  
  36. '------------------------------------------------------
  37. 'this method adds the Add-In to VB
  38. '------------------------------------------------------
  39. Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)
  40.     On Error GoTo error_handler
  41.     Dim cmdNew As CommandBarControl
  42.     Dim plugin As ICHPlugin
  43.     
  44.     'save the vb instance
  45.     Set m_VBE = Application
  46.     Set m_AddInInst = AddInInst
  47.     
  48.     'Use index for International Version of VB, thanks bicio!
  49.     Dim menuBar As CommandBar
  50.         
  51.     Set menuBar = m_VBE.CommandBars(1)
  52.     Set cbarCodeHelp = menuBar.Controls.Add(msoControlPopup, , , menuBar.Controls.Count - 1)
  53.     
  54.     cbarCodeHelp.Caption = "&CodeHelp"
  55.     
  56.     Set cmdNew = AddMenuItem("&Plugins Manager...", , False)
  57.     Set ctlPlugins = m_VBE.Events.CommandBarEvents(cmdNew)
  58.     
  59.     Set cmdNew = AddMenuItem("&About...", , False)
  60.     Set ctlAbout = m_VBE.Events.CommandBarEvents(cmdNew)
  61.     
  62.     LoadPlugins ConnectMode, custom
  63.     'start low level message monitoring
  64.     Set HookMon = New HookMonitor
  65.     HookMon.StartMonitor
  66.     
  67.     'tell plugins we're ready
  68.     For Each plugin In mCHCore.Plugins
  69.         If plugin.enabled Then
  70.             plugin.OnConnection ConnectMode, custom
  71.         End If
  72.     Next
  73.     customVar = custom
  74.     Exit Sub
  75.     
  76. error_handler:
  77.     
  78.     MsgBox Err.Description, vbInformation, "Error Encountered"
  79.     
  80. End Sub
  81.  
  82. '------------------------------------------------------
  83. 'this method removes the Add-In from VB
  84. '------------------------------------------------------
  85. Private Sub AddinInstance_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
  86.     On Error Resume Next
  87.     
  88.     EndMonitor
  89.     RemovePlugins RemoveMode, custom
  90.     
  91.     Set coreGroup = Nothing
  92.     Set ctlAbout = Nothing
  93.     Set ctlPlugins = Nothing
  94.     cbarCodeHelp.Delete
  95.     Set cbarCodeHelp = Nothing
  96.     
  97.     Set m_VBE = Nothing
  98. End Sub
  99.  
  100. Private Sub ctlAbout_Click(ByVal CommandBarControl As Object, handled As Boolean, CancelDefault As Boolean)
  101.     frmAbout.Show vbModal
  102. End Sub
  103.  
  104. Private Sub ctlPlugins_Click(ByVal CommandBarControl As Object, handled As Boolean, CancelDefault As Boolean)
  105.     Dim f As frmPlugins
  106.     Set f = New frmPlugins
  107.     Set f.Plugins = mCHCore.Plugins
  108.     f.Show vbModal
  109.     Unload f
  110.     Set f = Nothing
  111. End Sub
  112.  
  113.  
  114.  
  115. Private Function AddMenuItem(ByVal Caption As String, _
  116.     Optional ByVal iconPic As stdole.Picture = Nothing, _
  117.     Optional aboveSeparator As Boolean = True) As CommandBarControl
  118.     
  119.     If Not cbarCodeHelp Is Nothing Then
  120.         Dim dropDown As CommandBarPopup
  121.         Dim newButton As CommandBarButton
  122.         Dim iconBmp As StdPicture
  123.          
  124.         Set dropDown = cbarCodeHelp
  125.         
  126.         If aboveSeparator Then
  127.             'add menu item above the menuseparator
  128.             Set newButton = dropDown.Controls.Add(msoControlButton, , , coreGroup.Index)
  129.         
  130.         Else
  131.             
  132.             'add menu item below the separator
  133.             Set newButton = dropDown.Controls.Add(msoControlButton)
  134.             If coreGroup Is Nothing Then
  135.                 'add separator
  136.                 Set coreGroup = newButton
  137.                 coreGroup.BeginGroup = True
  138.             End If
  139.             
  140.         End If
  141.         
  142.         newButton.Caption = Caption
  143.                 
  144.         If Not iconPic Is Nothing Then
  145.  
  146. On Error GoTo SKIP_FACE
  147.             
  148.             Clipboard.Clear
  149.             newButton.CopyFace
  150.             Set iconBmp = Clipboard.GetData
  151.             
  152.             CopyIconToClipBoardAsBmp iconPic, iconBmp
  153.  
  154.             newButton.PasteFace
  155.             Clipboard.Clear
  156. SKIP_FACE:
  157.         End If
  158.         
  159.         Set AddMenuItem = newButton
  160.     End If
  161. End Function
  162.  
  163. Private Property Get ICHCore_AddInInst() As Object
  164.     Set ICHCore_AddInInst = m_AddInInst
  165. End Property
  166.  
  167. Private Function ICHCore_AddToCodeHelpMenu(ByVal Caption As String, Optional ByVal iconBitmap As Variant) As Object
  168.     Set ICHCore_AddToCodeHelpMenu = AddMenuItem(Caption, iconBitmap, True)
  169. End Function
  170.  
  171. Private Property Get ICHCore_VBE() As VBIDE.VBE
  172.     Set ICHCore_VBE = m_VBE
  173. End Property
  174.  
  175. Private Sub EndMonitor()
  176.     HookMon.EndMonitor
  177.     Set HookMon = Nothing
  178. End Sub
  179.  
  180. Private Sub LoadPlugins(ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, custom() As Variant)
  181.     Dim sPath As String
  182.     Dim sFile As String
  183.     
  184.     Set mCHCore.Plugins = New Plugins
  185.     sPath = App.Path & "\Plugins\"
  186.     sFile = Dir(sPath & "*.dll")
  187.     Do While Len(sFile) > 0
  188.         sFile = sPath & sFile
  189.         LoadPluginDLL sFile, ConnectMode, custom
  190.         sFile = Dir()
  191.     Loop
  192. End Sub
  193.  
  194. Private Sub LoadPluginDLL(ByVal fileName As String, ByVal ConnectMode As ext_ConnectMode, custom() As Variant)
  195.     'ICHPlugin Guid**************************************************************
  196.     'This is defined in CHLib.tlb
  197.     'All plugins must inplements this interface to be succesfully load by CHCore
  198.     Const GUID_ID = "{0412CF22-0411-4255-9EE1-57354438E4EB}"
  199.     '****************************************************************************
  200.     Dim tliApp As TLIApplication
  201.     Dim tliInfo As TypeLibInfo
  202.     Dim ccI As CoClassInfo
  203.     Dim inf As InterfaceInfo
  204.     
  205.     Dim plugin As ICHPlugin
  206.     Dim className As String
  207.     
  208.     On Error Resume Next
  209.     gPtr = ObjPtr(Me)
  210.     
  211.     Set tliApp = New TLIApplication
  212.     
  213.     Set tliInfo = tliApp.TypeLibInfoFromFile(fileName)
  214.         
  215.     For Each ccI In tliInfo.CoClasses
  216.         For Each inf In ccI.Interfaces
  217.             If inf.Guid = GUID_ID Then
  218.                 'this class implements ICHPlugin
  219.                 className = tliInfo.Name & "." & ccI.Name
  220.                 Set plugin = CreateObject(className)
  221.                 
  222.                 If Not plugin Is Nothing Then
  223.                     
  224.                     plugin.CHCore = gPtr
  225.                     plugin.enabled = (CLng(GetSetting("CodeHelp", plugin.Name, "Enabled", vbChecked)) = vbChecked)
  226.                     
  227.                     mCHCore.Plugins.Add plugin
  228.                     Set plugin = Nothing
  229.                 End If
  230.                 
  231.                 Exit For
  232.             End If
  233.         Next
  234.         'continue in case there are more than one class that implements ICHPlugin
  235.     Next
  236.     
  237. End Sub
  238.  
  239. Private Sub RemovePlugins(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
  240.     Dim plugin As ICHPlugin
  241.     Dim pList As Plugins
  242.     Dim i As Long
  243.     
  244.     Set pList = mCHCore.Plugins
  245.     
  246.     For Each plugin In pList
  247.         plugin.OnDisconnect RemoveMode, custom
  248.     Next
  249.     
  250.     'Delete plugin from collection
  251.     For i = 1 To pList.Count
  252.         pList.Remove 1
  253.     Next
  254.     
  255.     Set mCHCore.Plugins = Nothing
  256. End Sub
  257.  
  258.