1/*
2 * Copyright 2006, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 */
5
6
7#include <Application.h>
8#include <MessageRunner.h>
9#include <StatusBar.h>
10#include <Window.h>
11
12#include <stdio.h>
13
14
15const uint32 kMsgUpdate = 'updt';
16
17class Window : public BWindow {
18	public:
19		Window();
20
21		virtual void MessageReceived(BMessage* message);
22		virtual bool QuitRequested();
23
24	private:
25		BMessageRunner* fUpdater;
26		BStatusBar*	fStatusBar;
27};
28
29
30Window::Window()
31	: BWindow(BRect(100, 100, 520, 200), "StatusBar-Test",
32			B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS)
33{
34	BView* main = new BView(Bounds(), NULL, B_FOLLOW_ALL, B_WILL_DRAW);
35	main->SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
36	AddChild(main);
37
38	BRect rect(20, 10, 400, 30);
39	fStatusBar = new BStatusBar(rect, NULL, "label", "trailing label");
40	fStatusBar->SetResizingMode(B_FOLLOW_LEFT_RIGHT);
41	//fStatusBar->ResizeToPreferred();
42	float width, height;
43	fStatusBar->GetPreferredSize(&width, &height);
44	fStatusBar->ResizeTo(rect.Width(), height);
45	fStatusBar->SetMaxValue(50.0f);
46	main->AddChild(fStatusBar);
47
48	BMessage update(kMsgUpdate);
49	fUpdater = new BMessageRunner(this, &update, 10000LL);
50}
51
52
53void
54Window::MessageReceived(BMessage* message)
55{
56	switch (message->what) {
57		case kMsgUpdate:
58		{
59			char buffer[100];
60			snprintf(buffer, sizeof(buffer), "%ld ", (int32)fStatusBar->CurrentValue());
61			fStatusBar->Update(1, fStatusBar->CurrentValue() > 25 ? " updated!" : NULL, buffer);
62
63			if (fStatusBar->CurrentValue() >= fStatusBar->MaxValue()) {
64#if 1
65				fStatusBar->Reset("-", "????");
66#else
67				fStatusBar->Reset();
68				fStatusBar->SetText("-");
69				fStatusBar->SetTrailingText("????");
70#endif
71				fStatusBar->SetMaxValue(50.0);
72			}
73		}
74
75		default:
76			BWindow::MessageReceived(message);
77	}
78}
79
80
81bool
82Window::QuitRequested()
83{
84	be_app->PostMessage(B_QUIT_REQUESTED);
85	delete fUpdater;
86	return true;
87}
88
89
90//	#pragma mark -
91
92
93class Application : public BApplication {
94	public:
95		Application();
96
97		virtual void ReadyToRun(void);
98};
99
100
101Application::Application()
102	: BApplication("application/x-vnd.haiku-test")
103{
104}
105
106
107void
108Application::ReadyToRun(void)
109{
110	BWindow *window = new Window();
111	window->Show();
112}
113
114
115//	#pragma mark -
116
117
118int
119main(int argc, char **argv)
120{
121	Application app;
122
123	app.Run();
124	return 0;
125}
126
127