{-# OPTIONS -cpp -#include windows.h -#include commctrl.h #-} -- ---------------------------------------------------------------------------- -- | -- Module : HaskellPackage -- Author : Krasimir Angelov -- Copyright : (c) Krasimir Angelov, All Rights Reserved -- -- ---------------------------------------------------------------------------- module HaskellPackage ( new, State , setSite , queryClose , close , getAutomationObject , createTool , resetDefaults , getPropertyPage , getIdBmpSplash , getOfficialName , getProductID , getProductDetails , getIdIcoLogoForAboutbox ) where import Com import ComServ import Automation hiding (release) import Wtypes import ServProv(IServiceProvider(..)) import VsTypes(VSCOOKIE, VSPROPSHEETPAGE, VSPKGRESETFLAGS) import VsProject(iidIVsProjectFactory) import SiteServices import Project ( clsidHaskellProject ) import ProjectFactory ( newHaskellProjectFactory ) import VsClassView(iidIVsLibraryMgr) import Data.IORef import Control.Exception import Foreign.Ptr import Foreign.C.String import Debug.Trace (putTraceMsg) #include "../../vs_haskell_ui/resource.h" type State = IORef (VSCOOKIE, VSCOOKIE, SiteServices) new :: IO State new = newIORef (0,0,undefined) setSite :: IServiceProvider () -> State -> IO () setSite servProv st = mdo services <- newSiteServices servProv uiInst <- loadUILibrary services iProjectFact <- newHaskellProjectFactory uiInst services pfCookie <- registerProjectType clsidHaskellProject iProjectFact services iLibraryMgr <- queryInterface iidIVsLibraryMgr iProjectFact lmCookie <- registerLibraryMgr clsidHaskellProject iLibraryMgr services release iLibraryMgr release iProjectFact writeIORef st (pfCookie,lmCookie,services) queryClose :: State -> IO BOOL queryClose st = do putTraceMsg "HaskellPackage->queryClose" return 1 close :: State -> IO () close st = do putTraceMsg "HaskellPackage->close" (pfCookie,lmCookie,services) <- readIORef st unregisterProjectType pfCookie services unregisterLibraryMgr lmCookie services releaseSiteServices services getAutomationObject :: WideString -> State -> IO (IDispatch ()) getAutomationObject wstr st = error "HaskellPackage->getAutomationObject" createTool :: GUID -> State -> IO () createTool guid st = error "HaskellPackage->createTool" resetDefaults :: VSPKGRESETFLAGS -> State -> IO () resetDefaults flags st = error "HaskellPackage->resetDefaults" getPropertyPage :: GUID -> VSPROPSHEETPAGE -> State -> IO VSPROPSHEETPAGE getPropertyPage guid propPage st = error "HaskellPackage->getPropertyPage" getIdBmpSplash :: State -> IO UINT getIdBmpSplash st = return IDB_VS_HASKELL_LOGO getOfficialName :: State -> IO String getOfficialName st = return "Visual Haskell" getProductID :: State -> IO String getProductID st = return "" getProductDetails :: State -> IO String getProductDetails st = return ("Visual Haskell 0.1\r\n"++ "Copyright (C) Microsoft Corporation. All rights reserved.\r\n"++ "Copyright (C) Krasimir Angelov.\r\n"++ "Copyright (C) The University of Glasgow.") getIdIcoLogoForAboutbox :: State -> IO UINT getIdIcoLogoForAboutbox st = return IDI_VS_HASKELL_ABOUT_ICON