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