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