module Manatee.Toolkit.Widget.PopupWindow where
import Control.Applicative hiding (empty)
import Graphics.UI.Gtk
import Manatee.Toolkit.Gtk.Container
data PopupWindow =
PopupWindow {pwWindow :: Window
,pwFrame :: Frame}
popupWindowDefaultHeight :: Int
popupWindowDefaultHeight = 360
popupWindowNew :: IO PopupWindow
popupWindowNew = do
window <- windowNew
frame <- frameNew
window `containerAdd` frame
set window [windowTypeHint := WindowTypeHintDialog
,windowWindowPosition := WinPosCenter
,windowDecorated := False
,windowAcceptFocus := False
,windowDestroyWithParent := True
,windowResizable := True
]
return $ PopupWindow window frame
popupWindowStickParent :: WidgetClass widget => PopupWindow -> widget -> IO ()
popupWindowStickParent popupWindow widget =
castToWindow <$> widgetGetToplevel widget
>>= windowSetTransientFor (pwWindow popupWindow)
popupWindowSetAllocation :: PopupWindow -> Rectangle -> IO ()
popupWindowSetAllocation popupWindow (Rectangle x y w h) = do
let window = pwWindow popupWindow
windowMove window x y
widgetSetSizeRequest window w h
windowResize window w h
popupWindowShow :: PopupWindow -> IO ()
popupWindowShow = widgetShowAll . pwWindow
popupWindowHide :: PopupWindow -> IO ()
popupWindowHide = widgetHide . pwWindow
popupWindowAdd :: WidgetClass child => PopupWindow -> child -> IO ()
popupWindowAdd popupWindow child =
pwFrame popupWindow `containerAdd` child
popupWindowRemove :: PopupWindow -> IO ()
popupWindowRemove = containerRemoveAll . pwFrame
popupWindowIsVisible :: PopupWindow -> IO Bool
popupWindowIsVisible win = get (pwWindow win) widgetVisible
popupWindowExit :: PopupWindow -> IO ()
popupWindowExit win = do
popupWindowRemove win
popupWindowHide win