xref: /haiku/src/tests/servers/app/statusbar/main.cpp (revision bab64f65bb775dc23060e276f1f1c4498ab7af6c)
1d36ae78cSStephan Aßmus #include <stdio.h>
2d36ae78cSStephan Aßmus 
3d36ae78cSStephan Aßmus #include <Application.h>
4d36ae78cSStephan Aßmus #include <Directory.h>
5d36ae78cSStephan Aßmus #include <Entry.h>
6d36ae78cSStephan Aßmus #include <Message.h>
7d36ae78cSStephan Aßmus #include <MessageRunner.h>
8d36ae78cSStephan Aßmus #include <Messenger.h>
9d36ae78cSStephan Aßmus #include <StatusBar.h>
10d36ae78cSStephan Aßmus #include <Window.h>
11d36ae78cSStephan Aßmus 
12d36ae78cSStephan Aßmus enum {
13d36ae78cSStephan Aßmus 	MSG_PULSE	= 'puls'
14d36ae78cSStephan Aßmus };
15d36ae78cSStephan Aßmus 
16d36ae78cSStephan Aßmus class Window : public BWindow {
17d36ae78cSStephan Aßmus public:
Window(BRect frame)18d36ae78cSStephan Aßmus 	Window(BRect frame)
19d36ae78cSStephan Aßmus 		: BWindow(frame, "BStatusBar Test", B_TITLED_WINDOW_LOOK,
20d36ae78cSStephan Aßmus 			B_NORMAL_WINDOW_FEEL, B_ASYNCHRONOUS_CONTROLS
21d36ae78cSStephan Aßmus 			| B_QUIT_ON_WINDOW_CLOSE | B_NOT_ZOOMABLE),
22d36ae78cSStephan Aßmus 		  fHomeFolderEntryCount(0),
23d36ae78cSStephan Aßmus 		  fHomeFolderCurrentEntry(0)
24d36ae78cSStephan Aßmus 	{
25d36ae78cSStephan Aßmus 		frame = Bounds();
26d36ae78cSStephan Aßmus 		BView* background = new BView(frame, "bg", B_FOLLOW_ALL, 0);
27*d231c2a7Slooncraz 		background->SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
28d36ae78cSStephan Aßmus 		AddChild(background);
29d36ae78cSStephan Aßmus 
30d36ae78cSStephan Aßmus 		frame = background->Bounds();
31d36ae78cSStephan Aßmus 		frame.InsetBy(10, 10);
32d36ae78cSStephan Aßmus 		fStatusBar = new BStatusBar(frame, "status", "Label: ", "-Trailing");
33d36ae78cSStephan Aßmus 		fStatusBar->SetResizingMode(B_FOLLOW_ALL);
34d36ae78cSStephan Aßmus 		background->AddChild(fStatusBar);
35d36ae78cSStephan Aßmus 
36d36ae78cSStephan Aßmus 		fHomeFolder.SetTo("/boot/home/");
37d36ae78cSStephan Aßmus 		BEntry entry;
38d36ae78cSStephan Aßmus 		while (fHomeFolder.GetNextEntry(&entry) == B_OK)
39d36ae78cSStephan Aßmus 			fHomeFolderEntryCount++;
40d36ae78cSStephan Aßmus 
41d36ae78cSStephan Aßmus 		fPulse = new BMessageRunner(BMessenger(this),
42d36ae78cSStephan Aßmus 			new BMessage(MSG_PULSE), 1000000);
43d36ae78cSStephan Aßmus 	}
44d36ae78cSStephan Aßmus 
~Window()45d36ae78cSStephan Aßmus 	~Window()
46d36ae78cSStephan Aßmus 	{
47d36ae78cSStephan Aßmus 		delete fPulse;
48d36ae78cSStephan Aßmus 	}
49d36ae78cSStephan Aßmus 
MessageReceived(BMessage * message)50d36ae78cSStephan Aßmus 	virtual void MessageReceived(BMessage* message)
51d36ae78cSStephan Aßmus 	{
52d36ae78cSStephan Aßmus 		switch (message->what) {
53d36ae78cSStephan Aßmus 			case MSG_PULSE: {
54d36ae78cSStephan Aßmus 				BEntry entry;
55d36ae78cSStephan Aßmus 				if (fHomeFolder.GetNextEntry(&entry) < B_OK) {
56d36ae78cSStephan Aßmus 					fHomeFolderCurrentEntry = 0;
57d36ae78cSStephan Aßmus 					fHomeFolder.Rewind();
58d36ae78cSStephan Aßmus 					fStatusBar->Reset("Label: ", "-Trailing");
59d36ae78cSStephan Aßmus 					if (fHomeFolder.GetNextEntry(&entry) < B_OK)
60d36ae78cSStephan Aßmus 						break;
61d36ae78cSStephan Aßmus 				} else
62d36ae78cSStephan Aßmus 					fHomeFolderCurrentEntry++;
63d36ae78cSStephan Aßmus 				char name[B_FILE_NAME_LENGTH];
64d36ae78cSStephan Aßmus 				if (entry.GetName(name) < B_OK)
65d36ae78cSStephan Aßmus 					break;
66d36ae78cSStephan Aßmus 				float value = 100.0 * fHomeFolderCurrentEntry
67d36ae78cSStephan Aßmus 					/ (fHomeFolderEntryCount - 1);
68d36ae78cSStephan Aßmus 				fStatusBar->SetTo(value, "Text", name);
69d36ae78cSStephan Aßmus 				break;
70d36ae78cSStephan Aßmus 			}
71d36ae78cSStephan Aßmus 			default:
72d36ae78cSStephan Aßmus 				BWindow::MessageReceived(message);
73d36ae78cSStephan Aßmus 		}
74d36ae78cSStephan Aßmus 	}
75d36ae78cSStephan Aßmus private:
76d36ae78cSStephan Aßmus 	BStatusBar*	fStatusBar;
77d36ae78cSStephan Aßmus 	BDirectory	fHomeFolder;
78d36ae78cSStephan Aßmus 	int32		fHomeFolderEntryCount;
79d36ae78cSStephan Aßmus 	int32		fHomeFolderCurrentEntry;
80d36ae78cSStephan Aßmus 	BMessageRunner*	fPulse;
81d36ae78cSStephan Aßmus };
82d36ae78cSStephan Aßmus 
83d36ae78cSStephan Aßmus 
84d36ae78cSStephan Aßmus int
main(int argc,char * argv[])85d36ae78cSStephan Aßmus main(int argc, char* argv[])
86d36ae78cSStephan Aßmus {
87d36ae78cSStephan Aßmus 	BApplication app("application/x-vnd.stippi.statusbar_test");
88d36ae78cSStephan Aßmus 
89d36ae78cSStephan Aßmus 	BRect frame(50, 50, 350, 350);
90d36ae78cSStephan Aßmus 	Window* window = new Window(frame);
91d36ae78cSStephan Aßmus 	window->Show();
92d36ae78cSStephan Aßmus 
93d36ae78cSStephan Aßmus 	app.Run();
94d36ae78cSStephan Aßmus 	return 0;
95d36ae78cSStephan Aßmus }
96d36ae78cSStephan Aßmus 
97d36ae78cSStephan Aßmus 
98