implementation module StdControlDef


import	StdIOCommon, StdPictureDef


::	ButtonControl       ls pst = ButtonControl       String                                           [ControlAttribute *(ls,pst)]
::	CheckControl        ls pst = CheckControl        [CheckControlItem *(ls,pst)] RowsOrColumns       [ControlAttribute *(ls,pst)]
::	CompoundControl   c ls pst = CompoundControl     (c ls pst)                                       [ControlAttribute *(ls,pst)]
::	CustomButtonControl ls pst = CustomButtonControl Size Look                                        [ControlAttribute *(ls,pst)]
::	CustomControl       ls pst = CustomControl       Size Look                                        [ControlAttribute *(ls,pst)]
::	EditControl         ls pst = EditControl         String ControlWidth NrLines                      [ControlAttribute *(ls,pst)]
::	LayoutControl     c ls pst = LayoutControl       (c ls pst)                                       [ControlAttribute *(ls,pst)]
::	PopUpControl        ls pst = PopUpControl        [PopUpControlItem *(ls,pst)]               Index [ControlAttribute *(ls,pst)]
::	RadioControl        ls pst = RadioControl        [RadioControlItem *(ls,pst)] RowsOrColumns Index [ControlAttribute *(ls,pst)]
::	SliderControl       ls pst = SliderControl       Direction ControlWidth SliderState               (SliderAction     *(ls,pst))
                                                                                                      [ControlAttribute *(ls,pst)]
::	TextControl         ls pst = TextControl         String                                           [ControlAttribute *(ls,pst)]

::	CheckControlItem st	:==	(String, Maybe ControlWidth, MarkState, IdFun st)
::	PopUpControlItem st	:==	(String,                                IdFun st)
::	RadioControlItem st	:==	(String, Maybe ControlWidth,            IdFun st)
::	NrLines				:==	Int
::	RowsOrColumns
	=	Rows			Int
	|	Columns			Int
::	ControlWidth									// The width of the control:
	=	PixelWidth		Int							// the exact number of pixels
	|	TextWidth		String						// the exact string width in dialog font
	|	ContentWidth	String						// width of the control as if string is its content

::	ControlAttribute st                             // Default:
 // General control attributes:
	=	ControlActivate     (IdFun             st)  // id
	|	ControlDeactivate   (IdFun             st)  // id
	|	ControlFunction     (IdFun             st)  // id
	|	ControlHide                                 // initially visible
	|	ControlId           Id                      // no id
	|	ControlKeyboard     KeyboardStateFilter SelectState (KeyboardFunction st)
		                                            // no keyboard input/overruled
	|	ControlMinimumSize  Size                    // zero
	|	ControlModsFunction (ModifiersFunction st)  // ControlFunction
	|	ControlMouse        MouseStateFilter    SelectState (MouseFunction st)
		                                            // no mouse input/overruled
	|	ControlPen			[PenAttribute]			// default pen attributes
	|	ControlPos          ItemPos                 // (RightTo previous,zero)
	|	ControlResize       ControlResizeFunction   // no resize
	|	ControlSelectState  SelectState             // control Able
	|	ControlTip          String                  // no tip
	|	ControlWidth		ControlWidth			// system derived
 //	For CompoundControls only:
	|	ControlHMargin      Int Int                 // system dependent
	|	ControlHScroll      ScrollFunction          // no horizontal scrolling
	|	ControlItemSpace    Int Int                 // system dependent
	|	ControlLook         Bool Look               // control has white background
	|	ControlOrigin       Point2                  // Left top of ViewDomain
	|	ControlOuterSize	Size					// enclose elements
	|	ControlViewDomain   ViewDomain              // {zero,max range}
	|	ControlViewSize     Size                    // enclose elements
	|	ControlVMargin      Int Int                 // system dependent
	|	ControlVScroll      ScrollFunction          // no vertical   scrolling

::	ControlResizeFunction
	:==	Size ->                                     // current control outer size
		Size ->                                     // old     parent  view  size
		Size ->                                     // new     parent  view  size
		Size                                        // new     control outer size
::	ControlType
	:==	String
