⛏️ index : haiku.git

/*
 * Copyright (C) 2008 Stephan Aßmus <superstippi@gmx.de>
 * All rights reserved. Distributed under the terms of the MIT license.
 */
#include "TestWindow.h"

#include "Test.h"


TestView::TestView(BRect frame, Test* test, drawing_mode mode,
		bool useClipping, const BMessenger& target)
	:
	BView(frame, "test view", B_FOLLOW_ALL, B_WILL_DRAW),
	fTest(test),
	fTarget(target),
	fUseClipping(useClipping)
{
	SetDrawingMode(mode);
}


void
TestView::AttachedToWindow()
{
	fTest->Prepare(this);
	if (fUseClipping)
		fTest->SetupClipping(this);
}


void
TestView::Draw(BRect updateRect)
{
	if (fTest->RunIteration(this)) {
		Invalidate();
		return;
	}

	fTarget.SendMessage(MSG_TEST_FINISHED);
}


TestWindow::TestWindow(BRect frame, Test* test, drawing_mode mode,
		bool useClipping, const BMessenger& target)
	: BWindow(frame, "Test Window", B_TITLED_WINDOW_LOOK,
		B_FLOATING_ALL_WINDOW_FEEL, B_NOT_ZOOMABLE | B_NOT_RESIZABLE),
	  fTarget(target),
	  fAllowedToQuit(false)
{
	fTestView = new TestView(Bounds(), test, mode, useClipping, target);
	AddChild(fTestView);
	Show();
}


bool
TestWindow::QuitRequested()
{
	if (fAllowedToQuit)
		return true;

	fTarget.SendMessage(MSG_TEST_CANCELED);
	return false;
}


void
TestWindow::SetAllowedToQuit(bool allowed)
{
	fAllowedToQuit = allowed;
}