xref: /haiku/src/apps/diskusage/MainWindow.cpp (revision 962bcf7da154e9ccf723bd28fb1e36b2f59ed075)
1f75a7bf5SStephan Aßmus /*
2*962bcf7dSStephan Aßmus  * Copyright (c) 2008 Stephan Aßmus <superstippi@gmx.de>.
3*962bcf7dSStephan Aßmus  * Copyright (c) 2009 Philippe Saint-Pierre, stpere@gmail.com
4*962bcf7dSStephan Aßmus  * All rights reserved. Distributed under the terms of the MIT license.
5f75a7bf5SStephan Aßmus  *
6f75a7bf5SStephan Aßmus  * Copyright (c) 1999 Mike Steed. You are free to use and distribute this software
7f75a7bf5SStephan Aßmus  * as long as it is accompanied by it's documentation and this copyright notice.
8f75a7bf5SStephan Aßmus  * The software comes with no warranty, etc.
9f75a7bf5SStephan Aßmus  */
10f75a7bf5SStephan Aßmus #include "MainWindow.h"
11f75a7bf5SStephan Aßmus 
12f75a7bf5SStephan Aßmus #include <Application.h>
13f75a7bf5SStephan Aßmus #include <Node.h>
14f75a7bf5SStephan Aßmus #include <Roster.h>
15f75a7bf5SStephan Aßmus #include <Screen.h>
16f75a7bf5SStephan Aßmus 
17f75a7bf5SStephan Aßmus #include "Common.h"
18f75a7bf5SStephan Aßmus #include "ControlsView.h"
19f75a7bf5SStephan Aßmus #include "PieView.h"
20f75a7bf5SStephan Aßmus #include "StatusView.h"
21f75a7bf5SStephan Aßmus 
22f75a7bf5SStephan Aßmus 
23f75a7bf5SStephan Aßmus const float kMinWinSize = 275.0;
24f75a7bf5SStephan Aßmus 
25f75a7bf5SStephan Aßmus 
26f75a7bf5SStephan Aßmus MainWindow::MainWindow(BRect pieRect)
27f75a7bf5SStephan Aßmus 	: BWindow(pieRect, "DiskUsage", B_TITLED_WINDOW,
28f75a7bf5SStephan Aßmus 		B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE)
29f75a7bf5SStephan Aßmus {
30f75a7bf5SStephan Aßmus 	BRect r = Bounds();
31f75a7bf5SStephan Aßmus 	r.bottom = r.top + 1.0;
32f75a7bf5SStephan Aßmus 	fControlsView = new ControlsView(r);
33f75a7bf5SStephan Aßmus 	float cvHeight = fControlsView->Bounds().Height();
34f75a7bf5SStephan Aßmus 	AddChild(fControlsView);
35f75a7bf5SStephan Aßmus 
36f75a7bf5SStephan Aßmus 	r = Bounds();
37f75a7bf5SStephan Aßmus 	r.top = r.bottom - 1.0;
38f75a7bf5SStephan Aßmus 	fStatusView = new StatusView(r);
39f75a7bf5SStephan Aßmus 	float svHeight = fStatusView->Bounds().Height();
40f75a7bf5SStephan Aßmus 
41f75a7bf5SStephan Aßmus 	float winHeight = pieRect.Height() + cvHeight + svHeight;
42f75a7bf5SStephan Aßmus 	fStatusView->MoveTo(0.0, winHeight - svHeight);
43f75a7bf5SStephan Aßmus 	ResizeTo(r.Width(), winHeight);
44f75a7bf5SStephan Aßmus 
45f75a7bf5SStephan Aßmus 	AddChild(fStatusView);
46f75a7bf5SStephan Aßmus 
47f75a7bf5SStephan Aßmus 	r = fControlsView->Frame();
48f75a7bf5SStephan Aßmus 	r.top = r.bottom + 1.0;
49f75a7bf5SStephan Aßmus 	r.bottom = fStatusView->Frame().top - 1.0;
50f75a7bf5SStephan Aßmus 	fPieView = new PieView(r, this);
51f75a7bf5SStephan Aßmus 	AddChild(fPieView);
52f75a7bf5SStephan Aßmus 
53f75a7bf5SStephan Aßmus 	Show();
54f75a7bf5SStephan Aßmus 
55f75a7bf5SStephan Aßmus 	// Note: The following code is semi-broken because BScreen::Frame()
56f75a7bf5SStephan Aßmus 	// returns incorrect dimensions for the G200 in 1152x864 mode.  I reported
57f75a7bf5SStephan Aßmus 	// this bug, and Be said it's not a bug -- the Matrox driver actually uses
58f75a7bf5SStephan Aßmus 	// a resolution of 1152x900 in that mode.  Oh well.
59f75a7bf5SStephan Aßmus 	Lock();
60f75a7bf5SStephan Aßmus 	float extraHeight = fControlsView->Bounds().Height() + fStatusView->Bounds().Height();
61f75a7bf5SStephan Aßmus 	float minHeight = kMinWinSize + extraHeight;
62f75a7bf5SStephan Aßmus 	float maxHeight = BScreen(this).Frame().Height();
63f75a7bf5SStephan Aßmus 	float maxWidth = maxHeight - extraHeight;
64f75a7bf5SStephan Aßmus 	Unlock();
65f75a7bf5SStephan Aßmus 
66f75a7bf5SStephan Aßmus 	SetSizeLimits(kMinWinSize, maxWidth, minHeight, maxHeight);
67f75a7bf5SStephan Aßmus }
68f75a7bf5SStephan Aßmus 
69f75a7bf5SStephan Aßmus 
70f75a7bf5SStephan Aßmus MainWindow::~MainWindow()
71f75a7bf5SStephan Aßmus {
72f75a7bf5SStephan Aßmus }
73f75a7bf5SStephan Aßmus 
74f75a7bf5SStephan Aßmus 
75f75a7bf5SStephan Aßmus void
76f75a7bf5SStephan Aßmus MainWindow::MessageReceived(BMessage* message)
77f75a7bf5SStephan Aßmus {
78f75a7bf5SStephan Aßmus 	switch (message->what) {
79f75a7bf5SStephan Aßmus 		case kBtnRescan:
80f75a7bf5SStephan Aßmus 		case kMenuSelectVol:
81f75a7bf5SStephan Aßmus 		case B_REFS_RECEIVED:
82f75a7bf5SStephan Aßmus 			fPieView->MessageReceived(message);
83f75a7bf5SStephan Aßmus 			break;
84f75a7bf5SStephan Aßmus 
85f75a7bf5SStephan Aßmus 		case kBtnHelp:
86f75a7bf5SStephan Aßmus 			be_roster->Launch(&kHelpFileRef);
87f75a7bf5SStephan Aßmus 			break;
88f75a7bf5SStephan Aßmus 
89f75a7bf5SStephan Aßmus 		default:
90f75a7bf5SStephan Aßmus 			BWindow::MessageReceived(message);
91f75a7bf5SStephan Aßmus 			break;
92f75a7bf5SStephan Aßmus 	}
93f75a7bf5SStephan Aßmus }
94f75a7bf5SStephan Aßmus 
95f75a7bf5SStephan Aßmus 
96f75a7bf5SStephan Aßmus bool
97f75a7bf5SStephan Aßmus MainWindow::QuitRequested()
98f75a7bf5SStephan Aßmus {
99f75a7bf5SStephan Aßmus 	be_app->PostMessage(B_QUIT_REQUESTED);
100f75a7bf5SStephan Aßmus 	return true;
101f75a7bf5SStephan Aßmus }
102f75a7bf5SStephan Aßmus 
103f75a7bf5SStephan Aßmus 
104f75a7bf5SStephan Aßmus // #pragma mark -
105f75a7bf5SStephan Aßmus 
106f75a7bf5SStephan Aßmus 
107f75a7bf5SStephan Aßmus void
108f75a7bf5SStephan Aßmus MainWindow::ShowInfo(const FileInfo* info)
109f75a7bf5SStephan Aßmus {
110f75a7bf5SStephan Aßmus 	fStatusView->Show(info);
111f75a7bf5SStephan Aßmus }
112f75a7bf5SStephan Aßmus 
113f75a7bf5SStephan Aßmus 
114f75a7bf5SStephan Aßmus void
115f75a7bf5SStephan Aßmus MainWindow::SetRescanEnabled(bool enabled)
116f75a7bf5SStephan Aßmus {
117f75a7bf5SStephan Aßmus 	fControlsView->SetRescanEnabled(enabled);
118f75a7bf5SStephan Aßmus }
119f75a7bf5SStephan Aßmus 
120f75a7bf5SStephan Aßmus 
121f75a7bf5SStephan Aßmus BVolume*
122f75a7bf5SStephan Aßmus MainWindow::FindDeviceFor(dev_t device, bool invoke)
123f75a7bf5SStephan Aßmus {
124f75a7bf5SStephan Aßmus 	return fControlsView->FindDeviceFor(device, invoke);
125f75a7bf5SStephan Aßmus }
126