definition module menuaccess


//	********************************************************************************
//	Clean Standard Object I/O library.
//	********************************************************************************


import	menuhandle


//	Access operations on MenuHandles:
menuHandlesGetMenus			::							!*(MenuHandles .pst) -> (!*[MenuStateHandle .pst],	!*MenuHandles .pst)
menuHandlesGetKeys			::							!*(MenuHandles .pst) -> (![Char],					!*MenuHandles .pst)
menuHandlesGetEnabled		::							!*(MenuHandles .pst) -> (!Bool,						!*MenuHandles .pst)
menuHandlesGetNrMenuBound	::							!*(MenuHandles .pst) -> (!Bound,					!*MenuHandles .pst)
menuHandlesGetPopUpId		::							!*(MenuHandles .pst) -> (!Maybe Id,					!*MenuHandles .pst)

menuHandlesSetMenus			:: !*[MenuStateHandle .pst]	!*(MenuHandles .pst) -> *MenuHandles .pst
menuHandlesSetKeys			:: ![Char]					!*(MenuHandles .pst) -> *MenuHandles .pst
menuHandlesSetEnabled		:: !Bool					!*(MenuHandles .pst) -> *MenuHandles .pst
menuHandlesSetNrMenuBound	:: !Bound					!*(MenuHandles .pst) -> *MenuHandles .pst
menuHandlesSetPopUpId		:: !(Maybe Id)				!*(MenuHandles .pst) -> *MenuHandles .pst

//	Access operations on MenuStateHandle:
menuStateHandleGetHandle	::							!*(MenuStateHandle .pst) -> (!OSMenu,	!*MenuStateHandle .pst)
menuStateHandleGetMenuId	::							!*(MenuStateHandle .pst) -> (!Id,		!*MenuStateHandle .pst)
menuStateHandleGetOSMenuNr	::							!*(MenuStateHandle .pst) -> (!OSMenuNr,	!*MenuStateHandle .pst)
menuStateHandleGetTitle		::							!*(MenuStateHandle .pst) -> (!Title,	!*MenuStateHandle .pst)
menuStateHandleGetSelect	::							!*(MenuStateHandle .pst) -> (!Bool,		!*MenuStateHandle .pst)

menuStateHandleSetHandle	:: !OSMenu					!*(MenuStateHandle .pst) -> *MenuStateHandle .pst
menuStateHandleSetTitle		:: !Title					!*(MenuStateHandle .pst) -> *MenuStateHandle .pst
menuStateHandleSetSelect	:: !Bool					!*(MenuStateHandle .pst) -> *MenuStateHandle .pst


/*	menuIdsAreConsistent checks whether the MenuElementHandles contain (R(2))Ids that have already been
	associated with open receivers and if there are no duplicate Ids. 
	Neither the ReceiverTable nor the IdTable are changed if there are duplicate (R(2))Ids; 
	otherwise all (R(2))Ids have been bound.
*/
menuIdsAreConsistent :: !SystemId !Id !*[MenuElementHandle .ls .pst] !*ReceiverTable !*IdTable
							-> (!Bool,!*[MenuElementHandle .ls .pst],!*ReceiverTable,!*IdTable)

//	Convert a RadioMenuItem to the MenuItemHandle alternative of MenuElementHandle:
radioMenuItemToMenuElementHandle :: !(MenuRadioItem *(.ls,.pst)) -> *MenuElementHandle .ls .pst
