-- | HTk\'s /menu separator/.
-- A simple separator to group menu entries.
module HTk.Menuitems.MenuSeparator (

  MenuSeparator,
  createMenuSeparator

) where

import HTk.Kernel.Core
import HTk.Kernel.Configuration
import HTk.Kernel.Resources
import HTk.Menuitems.MenuItem
import HTk.Menuitems.Menu
import Events.Synchronized
import Util.Computation


-- -----------------------------------------------------------------------
-- datatype
-- -----------------------------------------------------------------------

-- | The @MenuSeparator@ datatype.
data MenuSeparator = MenuSeparator GUIOBJECT deriving Eq


-- -----------------------------------------------------------------------
-- creation
-- -----------------------------------------------------------------------

-- | Constructs a new menu separator and returns a handler.
createMenuSeparator :: Menu
   -- ^ the parent menu.
   -> [Config MenuSeparator]
   -- ^ the list of configuration options for this menu
   -- separator.
   -> IO MenuSeparator
   -- ^ A menu separator.
createMenuSeparator m cnf =
  createMenuItem m MENUSEPARATOR MenuSeparator cnf


-- -----------------------------------------------------------------------
-- instances
-- -----------------------------------------------------------------------

-- | A menu separator is a menu item (any menu item instantiates the
-- abstract @class MenuItem@).
instance MenuItem MenuSeparator

-- | Internal.
instance GUIObject MenuSeparator where
  toGUIObject (MenuSeparator w) = w
  cname w = "MenuSeparator"

-- | You can synchronize on a menu separator.
instance Synchronized MenuSeparator where
  -- Synchronizes on a menu separator.
  synchronize = synchronize . toGUIObject

-- | A menu separator has a configureable border.
instance HasBorder MenuSeparator

-- | A menu separator has either a vertival or a horizontal orientation.
instance HasOrientation MenuSeparator where
  -- Sets the menu separators orientation.
  orient Horizontal s = configure s [height 2] >> return s
  orient Vertical s = configure s [width 2] >> return s

-- | You can specify the size of a menu separator.
instance HasSize MenuSeparator