1/*
2 * Copyright 2008, Stephan A��mus <superstippi@gmx.de>
3 * Distributed under the terms of the MIT License.
4 */
5
6
7#include <Application.h>
8#include <Window.h>
9#include <View.h>
10
11#include <stdio.h>
12
13
14class View : public BView {
15public:
16	View(BRect rect, const char* name, uint32 followMode,
17			uint8 red, uint8 green, uint8 blue)
18		: BView(rect, name, followMode, 0)
19	{
20		SetViewColor(red, green, blue);
21	}
22};
23
24
25class TestView : public View {
26public:
27	TestView(BRect rect, const char* name, uint32 followMode,
28			uint8 red, uint8 green, uint8 blue)
29		: View(rect, name, followMode, red, green, blue)
30	{
31		SetEventMask(B_POINTER_EVENTS, B_NO_POINTER_HISTORY);
32	}
33
34	virtual	void MouseMoved(BPoint where, uint32 transit,
35			const BMessage* dragMessage)
36	{
37		ConvertToScreen(&where);
38		where -= Window()->Frame().LeftTop();
39		BView* view = Window()->FindView(where);
40		printf("View at (%.1f, %.1f): %s\n", where.x, where.y,
41			view ? view->Name() : "NULL");
42	}
43};
44
45
46//	#pragma mark -
47
48
49int
50main(int argc, char **argv)
51{
52	BApplication app("application/x-vnd.haiku-find_view");
53
54	BWindow* window = new BWindow(BRect(100, 100, 400, 400),
55		"ViewTransit-Test", B_TITLED_WINDOW,
56		B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE);
57
58	// TestView
59	BRect frame = window->Bounds();
60	View* testView = new TestView(frame, "Test View", B_FOLLOW_ALL, 255, 0, 0);
61	window->AddChild(testView);
62
63	// View 1
64	frame.InsetBy(20, 20);
65	frame.right /= 2;
66	View* view1 = new View(frame, "View 1",
67		B_FOLLOW_TOP_BOTTOM | B_FOLLOW_RIGHT, 0, 255, 0);
68	testView->AddChild(view1);
69
70	// View 2
71	frame.left = frame.right + 1;
72	frame.right = window->Bounds().right - 20;
73	View* view2 = new View(frame, "View 2",
74		B_FOLLOW_TOP_BOTTOM | B_FOLLOW_RIGHT, 0, 0, 255);
75	testView->AddChild(view2);
76	view2->Hide();
77
78
79	window->Show();
80
81	app.Run();
82	return 0;
83}
84