
;---;  gtfguido.r  ;-----------------------------------------------------------
*
*	****	GUI MACROS FOR GTFACE    ****
*
*	Author		Stefan Walter
*	Version		1.09
*	Last Revision	16.10.95
*	Identifier	gui_defined
*	Prefix		gui_	(GUI)
*				 ŻŻŻ
;------------------------------------------------------------------------------

;------------------
	IFND	gui_defined
gui_defined	=1

;------------------
	include	gtfdefs.r

;------------------
gui_xspace	equ	6
gui_yspace	equ	3
gui_xbspace	equ	4+2	;+2 \
gui_ybspace	equ	2+1	;+1 |  Because BevelBoxes are like that
gui_xbox	equ	10-2	;-2 |
gui_ybox	equ	5-1	;-1 /

;------------------

;------------------------------------------------------------------------------
*
* GUINew_	Begin new definitions for a window.
*
* USAGE:	GUINew_
*
;------------------------------------------------------------------------------

;------------------
GUINew_		MACRO
gui_XS		SET	gui_xspace
gui_YS		SET	gui_yspace
gui_XE		SET	gui_xspace
gui_YE		SET	gui_yspace
gui_WX		SET	gui_xspace*2
gui_WY		SET	gui_yspace*2
gui_BOXXE	SET	gui_xbspace
gui_BOXYE	SET	gui_ybspace
		ENDM


;------------------

;------------------------------------------------------------------------------
*
* GUIBoxStart_	Start a new BB for the next gadgets.
* GUIBoxEnd_	End a BB.
*
* GUIBesideBox_		Next BB beside an existing named BB.
* GUIBelowBox_		Next BB below an existing named BB.
*
* GUIRightBox_		Adjust this BB right to another named BB
* GUIBottomBox_		Adjust this BB to bottom of another named BB
*
* GUILeftBox_		Adjust this BB left border to another named BB
* GUIGotoBox_		Goto position of another box
*
* GUIIgnoreBox_		Don't paint box graphics
*
* USAGE:	GUIBoxStart_	name
*		GUIBoxEnd_	name
*
*		GUIBesideBox_	name
*		GUIBelowBox_	name
*
*		GUIRightBox_	name
*		GUIBottomBox_	name
*
*		GUILeftBox_	name
*		GUIGotoBox_	name
*
*		GUIIgnoreBox_
*
;------------------------------------------------------------------------------

;------------------
GUIBoxStart_	MACRO
gui_obj_\1_XS	EQU	gui_XS
gui_obj_\1_YS	EQU	gui_YS
gui_BOXXS	SET	gui_XS	
gui_XS	set	gui_XS+gui_xbspace	
gui_BOXXE	SET	gui_XS	
gui_BOXYS	SET	gui_YS
gui_YS	set	gui_YS+gui_ybspace	
gui_BOXYE	SET	gui_YS

gui_MAKEBOX	set	1
		ENDM


GUIBoxEnd_	MACRO
gui_obj_\1_XE	EQU	gui_BOXXE
gui_obj_\1_YE	EQU	gui_BOXYE

gui_XE		SET	gui_BOXXE+gui_xbspace
gui_YE		SET	gui_BOXYE+gui_ybspace

		IFLT	gui_XE,gui_WX
gui_WX		SET	gui_XE
		ENDC
		IFLT	gui_YE,gui_WY
gui_WY		SET	gui_YE
		ENDC

	IFNE	gui_MAKEBOX
	BevelBox_	gui_BOXXS,gui_BOXYS,gui_XE-gui_BOXXS,gui_YE-gui_BOXYS
		Recessed_
		Filled_	0
	ENDC
	
	ENDM


GUIBesideBox_	MACRO
gui_XS		SET	gui_obj_\1_XE+gui_xspace+gui_xbox
gui_YS		SET	gui_obj_\1_YS
gui_YE		SET	gui_YS
	ENDM


GUIBelowBox_	MACRO
gui_YS		SET	gui_obj_\1_YE+gui_yspace+gui_ybox
gui_XS		SET	gui_obj_\1_XS
gui_XE		SET	gui_XS
	ENDM


GUIRightBox_	MACRO
		IFLT	gui_obj_\1_XE,gui_BOXXE
gui_BOXXE	SET	gui_obj_\1_XE
		ENDC
		ENDM


GUIBottomBox_	MACRO
		IFLT	gui_obj_\1_YE,gui_BOXYE
gui_BOXYE	SET	gui_obj_\1_YE
		ENDC
		ENDM


GUILeftBox_	MACRO
gui_BOXXS	SET	gui_obj_\1_XS
		ENDM


GUIGotoBox_	MACRO
gui_XS		SET	gui_obj_\1_XS
gui_YS		SET	gui_obj_\1_YS
		ENDM


GUIIgnoreBox_	MACRO
gui_MAKEBOX	set	0
		ENDM



;------------------

;------------------------------------------------------------------------------
*
* GUIGadget_	Create a GUI gadget.
* GUIText_	Add autorefreshing GUI text.
*
* USAGE:	GUIGadget_	kind,name
*		GUIText_	FGPen,BGPen,text|textptr
*
;------------------------------------------------------------------------------

;------------------
GUIGadget_	MACRO
	Gadget_	\1,\2,gui_XS,gui_YS,gui_XE-gui_XS,gui_YE-gui_YS
gui_obj_\2_XS	EQU	gui_XS
gui_obj_\2_YS	EQU	gui_YS
gui_obj_\2_XE	EQU	gui_XE
gui_obj_\2_YE	EQU	gui_YE
	GUICoords_
		ENDM


GUIText_	MACRO
	WindowText_	gui_XS,gui_YS,\1,\2,\3
gui_YS	set	gui_YS+8
	ENDM


GUICoords_	MACRO
	IFLT	gui_XE,gui_BOXXE
gui_BOXXE	set	gui_XE
	ENDC
	IFLT	gui_YE,gui_BOXYE
gui_BOXYE	set	gui_YE
	ENDC
	ENDM


;------------------

;------------------------------------------------------------------------------
*
* GUISize_	Declare size of next gadget.
* GUISizeFR_	Declare size of next gadget which has already set right side.
* GUIBelow_	Position next gadget below last or named gadget.
* GUIBeside_	Position next gadget beside last or named gadget.
* GUILeft_	Align left border of next gadget with named gadget.
* GUIRight_	Align right border of next gadget with named gadget.
* GUITop_	Align top border of next gadget with named gadget.
* GUIBottom_	Align bottom border of next gadget with named gadget.
*
* USAGE:	GUISize_	(width),(heigth)
*		GUISizeFR_	(width),(heigth)
*		GUIBelow_	(name)
*		GUIBeside_	(name)
*		GUILeft_	name
*		GUIRight_	name
*		GUITop_		name
*		GUIBottom_	name
*
;------------------------------------------------------------------------------

;------------------
GUISize_	MACRO			;width,heigth
	IFNC	'\1',''
gui_XE		SET	gui_XS+\1
	ENDC
	IFNC	'\2',''
gui_YE		SET	gui_YS+\2
	ENDC
	GUICoords_
		ENDM


GUISizeFR_	MACRO			;width,heigth
	IFNC	'\1',''
gui_XS		SET	gui_XE-\1
	ENDC
	IFNC	'\2',''
gui_YE		SET	gui_YS+\2
	ENDC
	GUICoords_
		ENDM


GUIBeside_	MACRO			;name|<nothing>
	IFC	'\1',''
gui_XS		SET	gui_XE+gui_xspace
	ELSE
gui_XS		SET	gui_obj_\1_XE+gui_xspace
gui_YS		SET	gui_obj_\1_YS
	GUICoords_
	ENDC
	ENDM

GUIBelow_	MACRO			;name|<nothing>
	IFC	'\1',''
gui_YS		SET	gui_YE+gui_yspace
	ELSE
gui_YS		SET	gui_obj_\1_YE+gui_yspace
gui_XS		SET	gui_obj_\1_XS
	GUICoords_
	ENDC
	ENDM

GUILeft_	MACRO			;name
gui_XS		SET	gui_obj_\1_XS
	GUICoords_
		ENDM

GUIRight_	MACRO			;name
gui_XE		SET	gui_obj_\1_XE
	GUICoords_
		ENDM

GUITop_		MACRO			;name
gui_YS		SET	gui_obj_\1_YS
	GUICoords_
		ENDM

GUIBottom_	MACRO			;name
gui_YE		SET	gui_obj_\1_YE
	GUICoords_
		ENDM


;------------------

;------------------------------------------------------------------------------
*
* GUIAdjust_		Adjust start coordinates of next gadget.
* GUIAdjustEnd_		Adjust end coordinates after size defined.
* GUIRemember_		Assign current start position to symbols.
* GUISpace_		Declare empty space.
* GUIWindowSize_	Assign required window size to symbols.
* GUIAbsPos_		Go to absolute position.
* GUIGoto_		Go to start coords of an object.
* GUIPosInfo_		Evaluate and reserve (fontsensitive) space (coordinates).
*
* USAGE:	GUIAdjust	(x),(y)
*		GUIAdjustEnd_	(x),(y)
*		GUIRemember_	(xlab),(ylab)
*		GUISpace_	name
*		GUIWindowSize_	xlab,ylab
*		GUIAbsPos_	(x),(y)
*		GUIGoto_	name
*
;------------------------------------------------------------------------------

;------------------
GUIAdjust_	MACRO			;x,y adjust
	IFNC	'\1',''
gui_XS		SET	gui_XS+\1
	ENDC
	IFNC	'\2',''
gui_YS		SET	gui_YS+\2
	ENDC
		ENDM


GUIAdjustEnd_	MACRO			;x,y adjust
	IFNC	'\1',''
gui_XE		SET	gui_XE+\1
	ENDC
	IFNC	'\2',''
gui_YE		SET	gui_YE+\2
	ENDC
	GUICoords_
		ENDM


GUIRemember_	MACRO
	IFNC	'\1',''
\1		EQU	gui_XS
	ENDC
	IFNC	'\2',''
\2		EQU	gui_YS
	ENDC
		ENDM


GUISpace_	MACRO			;name
gui_obj_\1_XS	EQU	gui_XS
gui_obj_\1_YS	EQU	gui_YS
gui_obj_\1_XE	EQU	gui_XE
gui_obj_\1_YE	EQU	gui_YE
	GUICoords_
		ENDM


GUIWindowSize_	MACRO
\1		EQU	gui_WX+gui_xspace
\2		EQU	gui_WY+gui_yspace
gui_obj_\1_XS	EQU	0
gui_obj_\1_YS	EQU	0
gui_obj_\1_XE	EQU	gui_WX
gui_obj_\1_YE	EQU	gui_WY
		ENDM


GUIAbsPos_	MACRO
		IFNC	'\1',''
gui_XS		SET	\1
		ENDC
		IFNC	'\2',''
gui_YS		SET	\2
		ENDC
		ENDM


GUIGoto_	MACRO
gui_XS		SET	gui_obj_\1_XS
gui_YS		SET	gui_obj_\1_YS
		ENDM


;------------------

;------------------------------------------------------------------------------
*
* GUISpreadNew_		Start spreading of gadgets.
* GUISpreadAdd_		Add a gadget to spread.
* GUISpread_		Adjust gadget lefzt to last.
* GUICenterX_		Center a gadget horiz. in a box. Call after GUISize_!
* GUICenterY_		Center a gadget vert. in a box. Call after GUISize_!
*
* USAGE:	GUISpreadNew_	boxname
*		GUISpreadAdd_	name
*		GUISpread_
*		GUICenterX_	boxname
*		GUICenterY_	boxname
*
;------------------------------------------------------------------------------

;------------------
GUISpreadNew_	MACRO
gui_spreadval	SET	gui_obj_\1_XE-gui_obj_\1_XS-gui_xbspace
gui_XS		SET	gui_obj_\1_XS+gui_xspace
gui_spreadnum	SET	-1
		ENDM


GUISpreadAdd_	MACRO
gui_spreadval	SET	gui_spreadval-gui_obj_\1_XE+gui_obj_\1_XS
gui_spreadnum	SET	gui_spreadnum+1
		ENDM


GUISpread_	MACRO
		GUIBeside_
		IF2
gui_XS		SET	gui_XS-gui_xspace+(gui_spreadval/gui_spreadnum)
gui_spreadval	SET	gui_spreadval-(gui_spreadval/gui_spreadnum)
gui_spreadnum	SET	gui_spreadnum-1
		ENDC
		ENDM


GUICenterX_	MACRO
		IF2
gui_TEMP1	SET	gui_XE-gui_XS
gui_TEMP3	SET	gui_obj_\1_XE-gui_obj_\1_XS-gui_xbspace

gui_XS		SET	gui_obj_\1_XS+gui_xbspace+(gui_TEMP3-gui_TEMP1)/2
gui_XE		SET	gui_XS+gui_TEMP1
		ELSE
gui_TEMP1	SET	0
gui_TEMP3	SET	0
		ENDC
		ENDM


GUICenterY_	MACRO
		IF2
gui_TEMP2	SET	gui_YE-gui_YS
gui_TEMP4	SET	gui_obj_\1_YE-gui_obj_\1_YS-gui_ybspace

gui_YS		SET	gui_obj_\1_YS+gui_ybspace+(gui_TEMP4-gui_TEMP2)/2
gui_YE		SET	gui_YS+gui_TEMP2
		ELSE
gui_TEMP2	SET	0
gui_TEMP4	SET	0
		ENDC
		ENDM


;------------------

;------------------------------------------------------------------------------

;------------------
	ENDIF
	END



