
#include <classes/intuition/window.h>
#include <classes/intuition/screen.h>
#include <classes/exec/libraries.h>

class TestWindowC : public WindowC {
public:
	TestWindowC(IDCMPortC &, STRPTR title);
	~TestWindowC();
private:
	WindowCloseHandlerC wch;
};

TestWindowC::TestWindowC(IDCMPortC &p, STRPTR title)
	: WindowC(p,
		WA_DragBar,TRUE,
		WA_Width,300,
		WA_Height,150,
		WA_CloseGadget,TRUE,
		WA_DepthGadget,TRUE,
		WA_Title,title,
		WA_IDCMP,IDCMP_GADGETUP,
	   TAG_END),
	  wch(*this)
{
	addIDCMP(IDCMP_DISKINSERTED|IDCMP_DISKREMOVED);
}

TestWindowC::~TestWindowC()
{
	close();
}

LibraryBaseErrC GadToolsBase("gadtools.library",37);
LibraryBaseErrC UtilityBase("utility.library",37);
LibraryBaseErrC CxBase("commodities.library",37);
LibraryBaseErrC LayersBase("layers.library",37);
LibraryBaseErrC WorkbenchBase("workbench.library",37);

int main()
{
	if (!LibraryBaseC::areAllOpen())
		return 20;

	// diese Klasse empfängt und verarbeitet alle Signale
	SignalsC sc;

	// der IDCMPort für die Fenster
	IDCMPortC port;
	sc.add(port);

	// einige Fenster
	TestWindowC window1(port,"Fenster 1: busy");
	TestWindowC window2(port, "Fenster2");
	TestWindowC window3(port, "Fenster 3: busy");

	// eine Fensterliste
	WindowListC windowliste;
	windowliste.add(window1);
	windowliste.add(window2);
	windowliste.add(window3);

	// noch einen Ctrl C HandlerC zur Sicherheit einhängen
	CtrlCHandlerC ctrlchandler;
	sc.add(ctrlchandler);

	// alle Fenster öffnen
	window1.open(WA_Left,0,WA_Top,0,TAG_END);
	window2.open(WA_Left,20,WA_Top,20,TAG_END);
	window3.open(WA_Left,40,WA_Top,40,TAG_END);

	windowliste.setBusy(TRUE,&window2);

	// THE BIG AND EASY ONE!
	sc.loop();

	windowliste.close();

	return 0;
}
