Plan 9 from Bell Labs’s /usr/web/sources/contrib/nemo/octopus/port/live/tframe.m

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


Tframe: module {
	PATH:	con "/dis/o/tframe.dis";

	# Uses BACK, TEXT, HIGH colors from gui

	Tickwid:	con 3;
	Beofwid:	con 50;	# max width of begin/end of file marks

	Tbox: adt {
		sep:	int;						# 0 or \t or \n
		pos:	int;						# in frame blks
		nr:	int;						# len Tbox.text, save typing.
		pt:	Draw->Point;				# relative to fr.r
		wid:	int;						# width in pixels
		dirty:	int;						# must be drawn.
		txt:	string;					# debug only, for frame checking.
		text:	fn(b: self ref Tbox): string;	# debug dump
	};

	Frame:	adt {
		blks:		ref Tblks->Blks;	# the source for shown text
		boxes:	array of ref Tbox;	# text boxes on screen (text, or \t, or \n)
		nboxes:	int;
		pos:		int;				# in blks for first rune in frame
		nr:		int;
		ss, se:	int;
		mark:	int;				# mark for user, kept in place despite ins/dels.
		showsel:	int;
		showbeof:	int;
		cols:		array of ref Draw->Image;
		font: 	ref Draw->Font;
		tabsz:	int;
		tabwid:	int;				# tabsz * spwid
		spwid:	int;				# space width (min width for tabs)
		r:		Draw->Rect;
		i:		ref Draw->Image;
		lni:		ref Draw->Image;	# line buffer to draw boxes (double buffering).
		tick:		ref Draw->Image;
		sz:		Draw->Point;		# width, height in runes (aprox.)
		sbeof:	int;				# start of begin/end of file mark (x)
		ebeof:	int;				# end of mark (x)

		# primary interface
		new:		fn(r: Draw->Rect, i: ref Draw->Image,
					f: ref Draw->Font, cols: array of ref Draw->Image, beof: int): ref Frame;
		init:		fn(fr: self ref Frame, blks: ref Tblks->Blks, pos: int);
		ins:		fn(fr: self ref Frame, pos: int, nr: int): int;
		del:		fn(fr: self ref Frame, pos: int, nr: int);
		sel:		fn(fr: self ref Frame, ss: int, se: int);
		resize:	fn(fr: self ref Frame, r: Draw->Rect, i: ref Draw->Image);
		pt2pos:	fn(fr: self ref Frame, pt: Draw->Point): int;
		pos2pt:	fn(fr: self ref Frame, pos: int): Draw->Point;
		scroll:	fn(fr: self ref Frame, nlines: int);

		# auxiliary tools
		move:	fn(fr: self ref Frame, at: Draw->Point);
		redraw:	fn(fr: self ref Frame);

		# implementation
		fill:		fn(fr: self ref Frame);
		mktick:		fn(fr: self ref Frame);
		seek:		fn(fr: self ref Frame, pos: int): (int, int);
		findnl:		fn(fr: self ref Frame, bi: int): int;
		addboxes:	fn(fr: self ref Frame, bi: int, boxes: array of ref Tbox, renum: int);
		delboxes:		fn(fr: self ref Frame, bi: int, nb: int, renum: int);
		splitbox:		fn(fr: self ref Frame, bi: int, ri: int);
		fixselins:		fn(fr: self ref Frame, pos: int, nr: int);
		fixseldel:		fn(fr: self ref Frame, pos: int, nr: int);
		fmt:			fn(fr: self ref Frame, bi: int): int;
		placebox:		fn(fr: self ref Frame, bi: int);
		combinebox:	fn(fr: self ref Frame, bi: int): int;
		wrapbox:		fn(fr: self ref Frame, bi: int): int;
		sizebox:		fn(fr: self ref Frame, bi: int);
		drawbox:		fn(fr: self ref Frame, bi: int);
		drawtick:		fn(fr: self ref Frame, i: ref Draw->Image, pt: Draw->Point);
		draw:		fn(fr: self ref Frame, bi: int, be:int, force: int);
		boxtext:		fn(fr: self ref Frame, bi: int): string;
		chk:			fn(fr: self ref Frame);
		dump:		fn(fr: self ref Frame);
		panic:		fn(fr: self ref Frame, s: string);
	};

	init:		fn(d: Livedat, b: Tblks, dbg: int);
};

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.