

#include <classes/layouter/windows.h>
#include <classes/layouter/boopsigadgets.h>
#include <classes/layouter/decorgadgets.h>
#include <classes/exec/libraries.h>
#pragma header

class ThreeButtonGroupC : public GeometryGroupC {
public:
	ThreeButtonGroupC(
		GroupLayoutC &frame,
		LGButtonC &left,
		LGButtonC &middle, LGButtonC &right,
		ULONG topRelation, GeometryC *topObject, WORD topOffset,
		ULONG bottomRelation, GeometryC *bottomObject, WORD bottomOffset,
		ULONG leftRelation, GeometryC *leftObject, WORD leftOffset,
		ULONG rightRelation, GeometryC *rightObject, WORD rightOffset);
private:
	GeometryC leftGeo;
	GeometryC middleGeo;
	GeometryC rightGeo;
};

ThreeButtonGroupC::ThreeButtonGroupC(
		GroupLayoutC &frame,
		LGButtonC &left,
		LGButtonC &middle, LGButtonC &right,
		ULONG topRelation, GeometryC *topObject, WORD topOffset,
		ULONG bottomRelation, GeometryC *bottomObject, WORD bottomOffset,
		ULONG leftRelation, GeometryC *leftObject, WORD leftOffset,
		ULONG rightRelation, GeometryC *rightObject, WORD rightOffset)
	: GeometryGroupC(frame,
	  	topRelation, topObject, topOffset,
	  	bottomRelation, bottomObject, bottomOffset,
	  	leftRelation, leftObject, leftOffset,
	  	rightRelation, rightObject, rightOffset),
	  leftGeo(left,
	  	LAYOUT_SIZE,NULL,0,LAYOUT_GROUP,NULL,0,
	  	LAYOUT_PROCENTCENTER,NULL,20,LAYOUT_MAXSIZE,NULL,40),
	  middleGeo(middle,
	  	LAYOUT_SIZE,NULL,0,LAYOUT_GROUP,NULL,0,
	  	LAYOUT_PROCENTCENTER,&leftGeo,50,LAYOUT_MAXSIZE,NULL,0),
	  rightGeo(right,
	  	LAYOUT_SIZE,NULL,0,LAYOUT_GROUP,NULL,0,
	  	LAYOUT_PROCENTCENTER,&middleGeo,80,LAYOUT_MAXSIZE,NULL,0)
{
	GeometryGroupC::add(leftGeo);
	GeometryGroupC::add(middleGeo);
	GeometryGroupC::add(rightGeo);
}

class SUCButtonGroupC : public ThreeButtonGroupC, public GadgetListC {
public:
	SUCButtonGroupC(WindowC &,
		ULONG topRelation, GeometryC *topObject, WORD topOffset,
		ULONG bottomRelation, GeometryC *bottomObject, WORD bottomOffset,
		ULONG leftRelation, GeometryC *leftObject, WORD leftOffset,
		ULONG rightRelation, GeometryC *rightObject, WORD rightOffset);
private:
	LBBevelboxC frame;
	LBIButtonC left,middle,right;
};

SUCButtonGroupC::SUCButtonGroupC(WindowC &w,
		ULONG topRelation, GeometryC *topObject, WORD topOffset,
		ULONG bottomRelation, GeometryC *bottomObject, WORD bottomOffset,
		ULONG leftRelation, GeometryC *leftObject, WORD leftOffset,
		ULONG rightRelation, GeometryC *rightObject, WORD rightOffset)
	: ThreeButtonGroupC(frame,left,middle,right,
		topRelation,topObject,topOffset,
		bottomRelation,bottomObject,bottomOffset,
		leftRelation,leftObject,leftOffset,
		rightRelation,rightObject,rightOffset),
	  frame(w),
	  left(NULL,w,LAYOUT_AUTOSIZE,LAYOUT_AUTOSIZE,
	   GA_Text,"Save",
	   TAG_END),
	  middle(NULL,w,LAYOUT_AUTOSIZE,LAYOUT_AUTOSIZE,
	   GA_Text,"Use",
	   TAG_END),
	  right(NULL,w,LAYOUT_AUTOSIZE,LAYOUT_AUTOSIZE,
	   GA_Text,"Cancel",
	   TAG_END)
{
	GadgetListC::add(frame);
	GadgetListC::add(left);
	GadgetListC::add(middle);
	GadgetListC::add(right);
}

class ButtonWindowC : public StandardWindowC {
public:
	ButtonWindowC(GTIDCMPortC &, ScreenC &);
	~ButtonWindowC();
private:
	SUCButtonGroupC suc;
	WindowCloseHandlerC wch;
};

ButtonWindowC::ButtonWindowC(GTIDCMPortC &p, ScreenC &s)
	: StandardWindowC(p,s,NULL,
		TAG_END),
	  suc(*this,
	   LAYOUT_GROUP,NULL,2,LAYOUT_GROUP,NULL,-2,
	   LAYOUT_GROUP,NULL,2,LAYOUT_GROUP,NULL,-2),
	  wch(*this)
{
	gadgets.add(suc);
	innerGeo.add(suc);
}

ButtonWindowC::~ButtonWindowC()
{
	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;

	// öffentlichen Standardbildschirm sperren
	PublicScreenC screen();
	if (!screen.lock(NULL))
		return 100;

	// der IDCMPort (in der GadTools Version) für die Fenster
	GTIDCMPortC port;
	sc.add(port);

	// Das Fenster
	ButtonWindowC window(port,screen);

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

	// Fenster öffnen
	window.open();

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

	return 0;
}
