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

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


# Generic panel support
Wpanel: module {

	PATH: con "/dis/o/wpanel.dis";

	Qatom, Qrow, Qcol: con iota;	# for Panel.rowcol

	Phide,	# panel not shown
	Playout,	# layout container. reclaims space
	Pedit,	# kbd/mouse editing allowed
	Ptag,		# show the tag, accept mouse commands for tag

	Pmore,	# has hidden children (containers only)
	Pdirties,	# has dirty children (containers only)
	Pdirty,	# unsaved changes (for text panels, or atoms)
	Pline,	# at most one line (for text panels)

	Ptbl,		# tabulate content (for text panels)
	Psync,	# saves to fs pending, must sync.
	Predraw,	# must redraw
	Pdead,	# it's gone

	Pbusy,	# panel being update or doing another op.
	Pshown,	# panel shown in screen (used for redrawing tags)
	Pmax:	con int (1<<iota);

	Panel: adt {
		parent:	cyclic ref Panel;
		child:	cyclic array of ref Panel;	# Used for containers
		rowcol:	int;					# Qatom, Qrow, Qcol.
		order:	list of string;			# list of children names, for order
		nshown:	int;					# nb. of children shown (for Min)
		flags:	int;
		name:	string;
		path:		string;				# absolute path to panel dir
		depth:	int;					# in tree

		qid:		Sys->Qid;
		dqid:		Sys->Qid;
		cqid:		Sys->Qid;

		space:	int;

		rect:		Draw->Rect;
		orect:	Draw->Rect;
		size:		Draw->Point;
		wants:	Draw->Point;
		minsz:	Draw->Point;
		maxsz:	Draw->Point;
		font:		ref Draw->Font;		# only used by text panels
									# but kept here for the future
		impl:		Pimpl;
		implid:	int;

		ctls:	string;		# to keep ctl contents while doing i/o with fs.

		new:		fn(n: string, fp: ref Panel): ref Panel;
		fsctl:		fn(p: self ref Panel, s: string, async: int);
		text:		fn(p: self ref Panel): string;

		# functions delegated to the panel implementor

		# Called from the tree coordinator:
		init:		fn(p: self ref Panel);
		term:		fn(p: self ref Panel);
		ctl:		fn(p: self ref Panel, s: string);
		update:	fn(p: self ref Panel, d: array of byte);
		draw:	fn(p: self ref Panel);
		sync:	fn(p: self ref Panel);

		# Called from other procs:
		event:	fn(p: self ref Panel, s: string);		# ins, del
		mouse:	fn(p: self ref Panel, m: ref Gui->Cpointer, cm: chan of ref Gui->Cpointer);
		kbd:		fn(p: self ref Panel, r: int);
	};


	intag:		fn(p: ref Panel, xy: Draw->Point): int;
	escape:		fn(s: string): string;
	unescape:		fn(s: string): string;

	nth:			fn(l: list of string, n: int): string;
	init:			fn(d: Livedat, dir: string);
};

Pimpl: module {
		prefixes:	list of string;

		pinit:		fn(p: ref Wpanel->Panel);
		pterm:	fn(p: ref Wpanel->Panel);
		pctl:		fn(p: ref Wpanel->Panel, s: string);
		pupdate:	fn(p: ref Wpanel->Panel, d: array of byte);
		pevent:	fn(p: ref Wpanel->Panel, s: string);		# ins, del
		pdraw:	fn(p: ref Wpanel->Panel);
		pmouse:	fn(p: ref Wpanel->Panel, m: ref Gui->Cpointer, cm: chan of ref Gui->Cpointer);
		pkbd:	fn(p: ref Wpanel->Panel, r: int);
		psync:	fn(p: ref Wpanel->Panel);

		init:	fn(d: Livedat) : string;
};

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.