Charles.Forsyth20060303-partialeea662d19 years agoHistory
113 lines · 3.8 KB · Objective-C
RawDownload
Prefab: module{	PATH:	con	"$Prefab"; 	# types of Elements	EIcon:		con 0;	EText:		con 1;	ETitle:		con 2;	EHorizontal:	con 3;	EVertical:	con 4;	ESeparator:	con 5; 	# first arg to Element.adjust: size of elements	Adjpack:	con 10;	# leave alone, pack tightly	Adjequal:	con 11;	# make equal	Adjfill:	con 12;	# make equal, filling available space 	# second arg: position of element within space	Adjleft:	con 20;	Adjup:		con 20;	Adjcenter:	con 21;	Adjright:	con 22;	Adjdown:	con 22; 	# default fonts and colors for objects	Style: adt	{		titlefont:	ref Draw->Font;		textfont:	ref Draw->Font;		elemcolor:	ref Draw->Image;		edgecolor:	ref Draw->Image;		titlecolor:	ref Draw->Image;		textcolor:	ref Draw->Image;		highlightcolor:	ref Draw->Image;	}; 	# drawing environment for objects	Environ: adt	{		screen:	ref Draw->Screen;		style:	ref Style;	}; 	# operand for layout operators; set either (font, color, text) or (icon, mask)	Layout: adt	{		font:		ref Draw->Font;		color:		ref Draw->Image;		text:		string;		icon:		ref Draw->Image;		mask:		ref Draw->Image;		tag:		string;	}; 	# graphical objects in the interface, recursively defined for making lists	Element: adt	{		# part of Ell elements		kind:		int;			# type: EIcon, EText, etc.		r:		Draw->Rect;		# rectangle on screen		environ:	ref Environ;		# graphics screen, style		tag:		string;			# identifier for selection 		# different fields defined for different kinds of Elements		kids:		list of ref Element;	# children of EHorizontal, EVertical		str:		string;			# text in an EText element		mask:		ref Draw->Image;	# part of Eicon, ESeparator		image:		ref Draw->Image;	# part of Eicon, ESeparator, EText, Etitle		font:		ref Draw->Font;		# part of EText, Etitle 		# constructors		icon:		fn(env: ref Environ, r: Draw->Rect, icon, mask: ref Draw->Image): ref Element;		text:		fn(env: ref Environ, text: string, r: Draw->Rect, kind: int): ref Element;		layout:	fn(env: ref Environ, lay: list of Layout, r: Draw->Rect, kind: int): ref Element;		elist:		fn(env: ref Environ, elem: ref Element, kind: int): ref Element;		separator:	fn(env: ref Environ, r: Draw->Rect, icon, mask: ref Draw->Image): ref Element; 		# editing and geometry		append:	fn(elist: self ref Element, elem: ref Element): int;		adjust:	fn(elem: self ref Element, equal: int, dir: int);		clip:		fn(elem: self ref Element, r: Draw->Rect);		scroll:	fn(elem: self ref Element, d: Draw->Point);		translate:	fn(elem: self ref Element, d: Draw->Point);		show:	fn(elist: self ref Element, elem: ref Element): int;	}; 	# connects an element to a window for display	Compound: adt	{		image:		ref Draw->Image;	# window on which contents are drawn		environ:	ref Environ;		# graphics screen, style		r:		Draw->Rect;		# rectangle on screen		title:		ref Element;		# above the line (may be nil)		contents:	ref Element;		# below the line 		# constructors		iconbox:	fn(env: ref Environ, p: Draw->Point, title: string, icon, mask: ref Draw->Image): ref Compound;		textbox:	fn(env: ref Environ, r: Draw->Rect, title, text: string): ref Compound;		layoutbox:fn(env: ref Environ, r: Draw->Rect, title: string, lay: list of Layout): ref Compound;		box:		fn(env: ref Environ, p: Draw->Point, title, elist: ref Element): ref Compound; 		# display		draw:	fn(comp: self ref Compound);		redraw:	fn(comp: self ref Compound, r: Draw->Rect);		scroll:	fn(comp: self ref Compound, elem: ref Element, d: Draw->Point);		show:	fn(comp: self ref Compound, elem: ref Element): int; 		# support for using EHorizontal and EVertical as menus		select:	fn(comp: self ref Compound, elem: ref Element, i: int, c: chan of int): (int, int, ref Element);		tagselect:	fn(comp: self ref Compound, elem: ref Element, i: int, c: chan of int): (int, int, ref Element);		highlight:	fn(comp: self ref Compound, elem: ref Element, on: int);	};};