-- This source file is part of HGamer3D -- (A project to enable 3D game development in Haskell) -- For the latest info, see http://www.althainz.de/HGamer3D.html -- -- (c) 2011 Peter Althainz -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. -- You may obtain a copy of the License at -- -- http://www.apache.org/licenses/LICENSE-2.0 -- -- Unless required by applicable law or agreed to in writing, software -- distributed under the License is distributed on an "AS IS" BASIS, -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- See the License for the specific language governing permissions and -- limitations under the License. -- BasicGUI.hs -- |Base API, GUI Module, BasicGUI Sub-Module. -- Basic GUI functionality. module HGamer3D.APIs.Base.GUI.BasicGUI ( loadWindowFromFile, addWindowToDisplay, removeWindowFromDisplay, enableWindow, disableWindow, activateWindow, deactivateWindow, showWindow, hideWindow, getChildWindow, findChildWindowRecursive, getWindowProperty, setWindowProperty, loadScheme, loadFont, HGamer3D.APIs.Base.GUI.BasicGUI.setDefaultFont, setDefaultMouseCursor, HGamer3D.APIs.Base.GUI.BasicGUI.setDefaultTooltip, mapGUIEventToFunctionTag, mapGUIEventToFunction ) where import GHC.Ptr import HGamer3D.APIs.Base.Engine.Types import HGamer3D.APIs.Base.Engine.Engine import HGamer3D.Bindings.CEGUI.ClassPtr import HGamer3D.Bindings.CEGUI.Utils import HGamer3D.Bindings.CEGUI.ClassWindow as Window import HGamer3D.Bindings.CEGUI.ClassWindowManager as WindowManager import HGamer3D.Bindings.CEGUI.ClassWindowManagerHG3D as WindowManagerHG3D import HGamer3D.Bindings.CEGUI.ClassWindow as Window import HGamer3D.Bindings.CEGUI.ClassSystem as System import HGamer3D.Bindings.CEGUI.ClassSystemHG3D as SystemHG3D import HGamer3D.Bindings.CEGUI.ClassPropertySet as PropertySet import HGamer3D.Bindings.CEGUI.ClassHG3DEventStaticFunctions as EvtSF import HGamer3D.Data.HG3DClass import Control.Monad.Trans import Control.Monad.Reader import HGamer3D.Data.Vector loadWindowFromFile :: String -> String -> MHGamer3D (HG3DClass) loadWindowFromFile layoutFile prefix = do (cs, g3s, gui) <- ask hg3dWinMgr <- liftIO $ WindowManagerHG3D.new window <- liftIO $ WindowManagerHG3D.loadWindowLayoutHG3D hg3dWinMgr layoutFile prefix liftIO $ WindowManagerHG3D.delete hg3dWinMgr return (window) addWindowToDisplay :: HG3DClass -> MHGamer3D () addWindowToDisplay window = do (cs, g3s, gui) <- ask guiSheet <- liftIO $ System.getGUISheet (guiSystem gui) liftIO $ Window.addChildWindow2 guiSheet window removeWindowFromDisplay :: HG3DClass -> MHGamer3D () removeWindowFromDisplay window = do (cs, g3s, gui) <- ask guiSheet <- liftIO $ System.getGUISheet (guiSystem gui) liftIO $ Window.removeChildWindow2 guiSheet window enableWindow :: HG3DClass -> MHGamer3D () enableWindow window = do (cs, g3s, gui) <- ask liftIO $ Window.enable window disableWindow :: HG3DClass -> MHGamer3D () disableWindow window = do (cs, g3s, gui) <- ask liftIO $ Window.disable window activateWindow :: HG3DClass -> MHGamer3D () activateWindow window = do (cs, g3s, gui) <- ask liftIO $ Window.activate window deactivateWindow :: HG3DClass -> MHGamer3D () deactivateWindow window = do (cs, g3s, gui) <- ask liftIO $ Window.deactivate window showWindow :: HG3DClass -> MHGamer3D () showWindow window = do (cs, g3s, gui) <- ask liftIO $ Window.show window hideWindow :: HG3DClass -> MHGamer3D () hideWindow window = do (cs, g3s, gui) <- ask liftIO $ Window.hide window getChildWindow :: HG3DClass -> String -> MHGamer3D HG3DClass getChildWindow window name = do window <- liftIO $ Window.getChild window name return window findChildWindowRecursive :: HG3DClass -> String -> MHGamer3D (Maybe HG3DClass) findChildWindowRecursive window name = do window <- liftIO $ Window.getChildRecursive window name if (ocPtr window) == nullPtr then do return Nothing else do return (Just window) getWindowProperty :: HG3DClass -> String -> MHGamer3D String getWindowProperty window name = do prop <- liftIO $ PropertySet.getProperty window name return prop setWindowProperty :: HG3DClass -> String -> String -> MHGamer3D () setWindowProperty window name value = do liftIO $ PropertySet.setProperty window name value loadScheme :: String -> MHGamer3D () loadScheme schemeName = do (cs, g3s, gui) <- ask liftIO $ SystemHG3D.schemeManagerCreate (guiSchemeManager gui) schemeName loadFont :: String -> MHGamer3D () loadFont fontName = do (cs, g3s, gui) <- ask liftIO $ SystemHG3D.fontManagerCreate (guiFontManager gui) fontName setDefaultFont :: String -> MHGamer3D () setDefaultFont fontName = do (cs, g3s, gui) <- ask liftIO $ System.setDefaultFont (guiSystem gui) fontName setDefaultMouseCursor :: String -> String -> MHGamer3D () setDefaultMouseCursor schemeName cursorName = do (cs, g3s, gui) <- ask liftIO $ System.setDefaultMouseCursor3 (guiSystem gui) schemeName cursorName setDefaultTooltip :: String -> MHGamer3D () setDefaultTooltip ttName = do (cs, g3s, gui) <- ask liftIO $ System.setDefaultTooltip2 (guiSystem gui) ttName mapGUIEventToFunctionTag :: Event -> String -> MHGamer3D () mapGUIEventToFunctionTag event functionTag = do case event of GUIEvent name sender window -> do liftIO $ EvtSF.subscribeScriptedEvent window name functionTag return () mapGUIEventToFunction :: HG3DClass -> String -> EventFunction a -> EventMap a -> MHGamer3D (EventMap a) mapGUIEventToFunction window eventName function eventMap = do functionTag <- getUniqueName "Event" let newmap = mapFunctionToFunctionTag function functionTag eventMap liftIO $ EvtSF.subscribeScriptedEvent window eventName functionTag return newmap