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