  Oberon10.Scn.Fnt          	                V   Oberon10b.Scn.Fnt              *                +    )                             >            !    +            
        7                    	    $        -                        	    "            	    "        ]    	        N      MODULE [MODULENAME]; (** AUTHOR ""; PURPOSE ""; *)

IMPORT
	Modules, Strings,
	WMGraphics, WMMessages, WMRestorable, WMWindowManager, WMComponents [IMPORTS];

TYPE
	KillerMsg = OBJECT
	END KillerMsg;

	Window* = OBJECT (WMComponents.FormWindow)
	VAR
[VARIABLES]

		PROCEDURE &New*(c : WMRestorable.Context);
		VAR vc : WMComponents.VisualComponent;
		BEGIN
			IncCount;
			vc := CreateForm();
			Init(vc.bounds.GetWidth(), vc.bounds.GetHeight(), FALSE);

			SetContent(vc);
			SetTitle(Strings.NewString(""));
			SetIcon(WMGraphics.LoadImage("", TRUE));
		END New;

		PROCEDURE CreateForm() : WMComponents.VisualComponent;
		BEGIN
[CREATEFORM]
		END CreateForm;

		PROCEDURE Close;
		BEGIN
			Close^;
			DecCount
		END Close;

		PROCEDURE Handle(VAR x : WMMessages.Message);
		BEGIN
			IF (x.msgType = WMMessages.MsgExt) & (x.ext # NIL) THEN
				IF (x.ext IS KillerMsg) THEN Close
				END
			ELSE Handle^(x)
			END
		END Handle;

	END Window;

VAR
	nofWindows : LONGINT;

PROCEDURE IncCount;
BEGIN {EXCLUSIVE}
	INC(nofWindows)
END IncCount;

PROCEDURE DecCount;
BEGIN {EXCLUSIVE}
	DEC(nofWindows)
END DecCount;

PROCEDURE Cleanup*;
VAR die : KillerMsg;
	 msg : WMMessages.Message;
	 m : WMWindowManager.WindowManager;
BEGIN {EXCLUSIVE}
	NEW(die);
	msg.ext := die;
	msg.msgType := WMMessages.MsgExt;
	m := WMWindowManager.GetDefaultManager();
	m.Broadcast(msg);
	AWAIT(nofWindows = 0)
END Cleanup;

BEGIN
	Modules.InstallTermHandler(Cleanup)
END [MODULENAME].

SystemTools.Free [MODULENAME]~