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