definition module controlvalidate


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


import wstate


validateControlTitle	:: !String		-> String
validateSliderState		:: !SliderState	-> SliderState

getWElementControlIds	::			![WElementHandle .ls .pst]	-> (![Id],![WElementHandle .ls .pst])
getWElementControlIds`	::			![WElementHandle`]			-> [Id]

//	Id occurrence checks on [WElementHandle .ls .pst] and [WElementHandle`].
noDuplicateControlIds	::			![WElementHandle .ls .pst]	-> (!Bool,![WElementHandle .ls .pst])
noDuplicateControlIds`	::			![WElementHandle`]			-> Bool
disjointControlIds		:: ![Id]	![WElementHandle .ls .pst]	-> (!Bool,![WElementHandle .ls .pst])
disjointControlIds`		:: ![Id]	![WElementHandle`]			-> Bool


/*	Bind all free R(2)Ids that are contained in the WElementHandles.
	It assumes that it has already been checked that no R(2)Id is already bound in the ReceiverTable.
*/
bindReceiverControlIds	:: !SystemId !Id ![WElementHandle .ls .pst] !*ReceiverTable -> (![WElementHandle .ls .pst],!*ReceiverTable)

/*	controlIdsAreConsistent checks whether the WElementHandles contain (R(2))Ids that have already been
	associated with open receivers or other I/O objects and if there are no duplicate Ids. 
	The ReceiverTable is not changed if there are duplicate (R(2))Ids; otherwise all (R(2))Ids have been bound.
*/
controlIdsAreConsistent :: !SystemId !Id ![WElementHandle .ls .pst] !*ReceiverTable !*IdTable
							   -> (!Bool,![WElementHandle .ls .pst],!*ReceiverTable,!*IdTable)


/*	validateItemPos checks if the OffsetAlign argument of ItemPos matches the ItemLoc argument.
*/
validateItemPos			:: !ItemPos -> ItemPos
